这两种方法都对我有用,但我不确定从“良好做法”的角度来看这个推荐是什么。
我有一个在我的库中执行各种控制功能的类,因此需要初始化各种对象和属性。
将所有这些逻辑放在类的构造函数中是否可以,或者我应该将它放在“Initialise”方法中。
public MyClass()
{
mSubObjectA = new mSubObjectA();
mSubObjectA.DoStuff();
mSubObjectA.DoMoreStuff();
mSubObjectB = new mSubObjectB();
mSubObjectC = new mSubObjectC();
if (something)
{
DoStuff();
}
else
{
MagicHappens();
}
}
答案 0 :(得分:6)
就个人而言,我喜欢一个物体在我收到它时完全可操作。另一方面,在构造函数中做很多工作确实有些气味。
一种替代方法是编写一个静态工厂方法(或工厂类 * ),它可以在调用构造函数之前完成所需的所有工作,然后制作构造函数本身非常简单。您可以选择是否公开简单构造函数,具体取决于您的要求。
* 工厂类可以提高可测试性,并允许潜在的不同的工厂实现。另一方面,在那一点上,你有一个非常高的抽象水平,这可能会分散注意力。
答案 1 :(得分:1)
两者都有替代方法 - 使用factory类或factory method。
构建复杂的对象图是工厂模式的意义 - 听起来非常适合您的情况。
答案 2 :(得分:0)
这取决于您认为您将拥有多少个构造函数。不要重复代码。如果所有这些步骤只会在您的一个构造函数中发生,那么这不是问题。如果您想要做一些更有趣的事情,请智能地安排您的代码。