重型构造函数或使用方法

时间:2010-12-02 15:41:54

标签: c#

这两种方法都对我有用,但我不确定从“良好做法”的角度来看这个推荐是什么。

我有一个在我的库中执行各种控制功能的类,因此需要初始化各种对象和属性。

将所有这些逻辑放在类的构造函数中是否可以,或者我应该将它放在“Initialise”方法中。

public MyClass()
{
    mSubObjectA = new mSubObjectA();
    mSubObjectA.DoStuff();
    mSubObjectA.DoMoreStuff();

    mSubObjectB = new mSubObjectB();
    mSubObjectC = new mSubObjectC();

    if (something)
    {
        DoStuff();
    }
    else
    {
        MagicHappens();
    }
}

3 个答案:

答案 0 :(得分:6)

就个人而言,我喜欢一个物体在我收到它时完全可操作。另一方面,在构造函数中做很多工作确实有些气味。

一种替代方法是编写一个静态工厂方法(或工厂类 * ),它可以在调用构造函数之前完成所需的所有工作,然后制作构造函数本身非常简单。您可以选择是否公开简单构造函数,具体取决于您的要求。

* 工厂类可以提高可测试性,并允许潜在的不同的工厂实现。另一方面,在那一点上,你有一个非常高的抽象水平,这可能会分散注意力。

答案 1 :(得分:1)

两者都有替代方法 - 使用factory类或factory method

构建复杂的对象图是工厂模式的意义 - 听起来非常适合您的情况。

答案 2 :(得分:0)

这取决于您认为您将拥有多少个构造函数。不要重复代码。如果所有这些步骤只会在您的一个构造函数中发生,那么这不是问题。如果您想要做一些更有趣的事情,请智能地安排您的代码。