问题标签 [object-construction]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 依赖注入的创建模式
我专门将 C# 与 Ninject 一起使用,但问题不仅限于 Ninject。我的问题是我有几个类都具有不同的构造函数参数以及注入的参数。我知道我可以kernel.Get<MyObject>(constructor args here)
用来实例化对象。这对我来说感觉不对,因为我到处都有内核。我会尽力在下面列出示例。
我现在拥有的:
我知道在 Ninject 中我可以执行以下操作:
但这对我来说感觉不对。我想做的是将其更改为具有 Initialize 方法,但我不确定这是否是最佳实践或是否有更好的方法。
可能的新东西:
问题: “可能的新东西”是一种常见的做法、坏主意、好主意但执行不力,还是有更好的方法来做到这一点?
c++ - Qt 中哪个更有效:带有参数的构造函数或带有 setter 的默认构造函数?
问题如标题所示。
例如:
或者
哪个更有效率?
编辑:尽管除非重复执行,否则没有显着差异,但我仍然想知道,我宁愿想要答案而不是意见 - 正如 stackoverflow 的指南所建议的那样。
c++ - 具有多个 C++ 库的单例和工厂
我一直在阅读和搜索网络一段时间,但还没有找到一个好的解决方案。这是我想要做的:
我正在编写一个定义抽象基类的库 - 我们称之为IFoo。
该库还为此定义了几个实现——我们称它们为FooLibOne和FooLibTwo。
为了封装创建过程并根据某些运行时参数决定使用哪个具体实现,我使用工厂FooFactory将 std::string 映射到工厂方法(在我的情况下为 boost::function,但这不应该是重点这里)。它还允许注册新的工厂方法。它看起来像这样:
现在,我直接在FooFactory的构造函数中添加了库提供的实现(FooLibOne、FooLibTwo)——因此它们始终可用。一些库代码使用 FooFactory 来初始化某些对象等。到目前为止,我一直避免对工厂使用单例模式,因为 tee 模式经常被争论,我不确定单例模式的不同实现如何工作结合可能的多个共享库等。
然而,在工厂之间传递可能有点麻烦,我仍然认为,这是单例模式可能有用的场合之一。特别是如果我考虑到,库的用户应该能够添加更多的IFoo实现,这些实现也应该可供(已经存在的)库代码访问。当然,依赖注入——意味着我通过构造函数传递了一个工厂的实例——可以做到这一点(现在就这样做)。但是,如果我想更加灵活并引入第二层动态对象创建,这种方法就会失败。含义:我想在动态创建的对象(比如抽象基类IBar - BarOne和BarTwo - 再次通过工厂BarFactory)。
假设BarOne需要一个IFoo对象,但BarTwo不需要。无论如何,我仍然必须将 FooFactory 提供给BarFactory,因为其中一个IBar实现可能需要它。拥有全球可访问的工厂将缓解这个问题,并且我不会被迫预见特定接口的实现可能需要哪些工厂。此外,我可以直接在实现的源文件中注册创建方法。
既然我认为这是一个好主意,那么实施它的正确方法是什么?我打算采用模板化方法,例如Modern C++ Design中的SingletonHolder(另请参见Loki库)来包装工厂。但是,我宁愿将其实现为 Meyer 的 Singleton。但我仍然认为共享库会有问题。该解决方案应与 GCC(最好是 MSVC)一起使用。从设计的角度来看,我也对其他想法持开放态度,但请避免常见的“单身人士是邪恶的”-咆哮。;-)
提前致谢。
java - EclipseLink Profiler 显示正在创建的多个注册对象
在我的开发环境中,当我使用简单的获取所有 JQPL 查询运行 ReadAllQuery 时,我注意到在使用 EL 分析器后,有几个读取对象查询会被执行,每次都会增加我的总时间。例如,运行这样的查询会返回以下 Eclipse 配置文件输出。
返回多个Register the existing object
语句并查看日志输出,每个语句都在一个工作单元中完成,为什么以及如何防止这些?
javascript - 如果匈牙利符号大多被贬低,为什么“构造函数的上驼峰与其他一切的下驼峰”如此受欢迎?
至少在 StackOverflow 上似乎是这样,匈牙利符号通常被认为是一件坏事(尽管少数人仍然赞成)。
现在,在过去几个月我一直在进行大部分编码的 JavaScript 世界中,似乎已经接受了一种本质上非常相似的命名约定,但我还没有看到有人反对它,那就是UpperCamelCase
命名对象构造函数vslowerCamelCase
命名其他所有内容。
所以差异似乎只在表面:
- 匈牙利符号使用前缀,而 JavaScript 使用大小写。
- 匈牙利符号可以区分很多东西,而 JavaScript 只能区分“对象构造函数”和“非对象构造函数”。
有些人喜欢说“systems Hungarian”与“applications Hungarian”不同,前者表示类型,后者表示类型未涵盖的内容。在这种情况下,“systems Hungarian”通常仍然被认为是坏的,而“applications Hungarian”可能被认为是好的。
JavaScript 驼峰式大小写约定似乎更像系统匈牙利语,因此在这一点上没有任何优点。
人们反对匈牙利符号的观点似乎仍然适用于 JavaScript 对象构造函数:
- 编译器无论如何都知道类型。
- IDE 在这方面要好得多。
- 当类型改变时它太脆了。
它使代码变得杂乱无章,更难阅读。
那么这个 JavaScript 约定有什么不同呢?它可以在更一般的匈牙利符号不合适的地方使用?
是不是缺少好的 JavaScript IDE?其有限的使用范围是否使它不那么糟糕?是因为动态语言并没有太多的类型吗?因为它不能被过度使用,所以这不是问题吗?
(如果这属于programmers.SE而不是SO,请迁移。)
c++ - 如何在构造函数中初始化 C++ 对象成员变量?
我有一个有几个对象作为成员变量的类。我不希望在声明时调用这些成员的构造函数,所以我试图明确地挂在指向对象的指针上。我不知道我在做什么。
我想也许我可以执行以下操作,在初始化对象成员变量时立即调用构造函数:
但我希望MyClass
构造函数调用AnotherClass
构造函数。这是我的代码的样子:
文件BigMommaClass.h
文件BigMommaClass.cpp
这是我尝试编译时遇到的错误:
我是否使用了正确的方法,但语法错误?还是我应该从不同的方向来?
c++ - 根据参数在基类中创建派生类
我的问题与Need a design pattern to remove enums and switch statement in object creation 中的问题或多或少相同但是我认为抽象工厂模式在这里并不适合。
我目前正在计划重构/重新实现一些现有的 DAL/ORM 混合库。在现有代码的某处,有如下代码:
因此,负责数据库通信的库会使用有关数据库实体的所有信息填充一个结构,然后调用上述 create() 方法在 ORM 中实际创建相应的对象。但我不喜欢基类知道其所有派生类的想法,我也不喜欢 switch 语句。我也想避免仅仅为了创建这些对象而创建另一个类。您如何看待目前的做法?您将如何实现此功能?
python - 在python中从静态属性创建对象
我有一个 Category 类,每个类别都有不同的名称,类别的名称可以是未知的,好的和坏的,所有类别共享相同的行为,所以我不想为每种类别创建子类,问题当我试图以这种方式创建不同的类别时出现:
此语句应返回一个类别对象,其名称设置为“好”,因此我尝试以下操作:
然后我创建并使用具有以下输出的类别:
意识到这不起作用,我尝试了类似 java 的方法:
我在这里得到的是一个未定义的名称“类别”错误,所以我的问题是是否有一种 Python 的方式来创建这样的类别对象。
java - 创建没有默认构造函数的对象
我有一个包含 N 个类的包,我正在扫描所有类并通过一个方法初始化它们。所有具有默认构造函数的类都被初始化,但没有默认(零参数)构造函数的类会抛出异常。有谁知道如何在没有默认构造函数的情况下创建对象?
PS我需要一个java代码。
javascript - 对象构造过程中如何在对象中使用动态键名?
我想在创建对象期间使用动态键名。
我知道您可以在创建对象后在下一行执行此操作myObj[key] = 'someValue'
,但我很好奇在您创建对象时执行此操作。
关于它有很多类似的问题,但它们都是在使用[]
符号创建对象之后进行的。