我正在与我的同事讨论一个构造函数可以完成多少工作。我有一个类B,它内部需要另一个对象A。对象A是类B需要完成其工作的几个成员之一。它的所有公共方法都依赖于内部对象A。有关对象A的信息存储在DB中,因此我尝试通过在构造函数中的DB上进行查找来进行验证和获取。我的同事指出,除了捕获构造函数参数外,构造函数不应做太多工作。由于如果使用构造函数的输入未找到对象A,所有公共方法都将失败,因此我认为与其允许创建实例并在以后失败,不如让它早于构造器。
别人怎么想?如果这有任何区别,我正在使用C#。
阅读是否有理由在构造函数中完成对象的所有工作?我想知道通过转到DB来获取对象A是“使该对象准备好使用所需的任何其他初始化”的一部分,因为如果用户将错误的值传递给构造函数,我将无法使用其任何公共方法。
构造函数应实例化对象的字段,并进行其他任何必要的初始化,以使对象可以立即使用。这通常意味着构造函数很小,但是在某些情况下这将需要大量的工作。