我继承了一个初始化许多私有字段的类 - 一些在构造函数中初始化(参见dContext
),一些是通过字段初始化器(参见random
)。
public partial class Report_Aux
{
public Report_Aux()
{
logger = Log.Instance;
dContext = new DataContext(ConfigurationManager.AppSettings["DataContextConnectionString"]);
created = Util.GetDate("constructor");
...
}
Log logger;
DataContext dContext;
Random random = new Random();
DateTime created;
...
}
这令人困惑;什么是重构这个以减少太多字段和初始化的维护开销的最佳方法?
答案 0 :(得分:1)
您的类有许多依赖项,或者它需要的东西才能完成它的工作。 其作业不需要包含创建此类依赖项。您可以创建一个构造函数来宣告这些依赖项是什么,并且该类的 creator 负责看到该类具有它需要的所有工具才能工作。 (另一种代码方法是将这些依赖项简单地作为属性公开。)然后问题变成“谁提供了这些依赖项?谁知道如何构建这个类?”
您可能会考虑采用工厂方法。虽然您的班级的工作是使用可以使用的工具执行任何逻辑,但工厂的工作是构建类并提供工具。这是单一责任。
class ReportAuxFactory
{
public Report_Aux Create()
{
// create dependencies?
// instantiate class, provide dependencies
return theInstance;
}
}
如果将它与这些依赖项的适当抽象结合起来,您会发现可以使用符合共享接口但提供不同功能的不同实现来编写类。这可以使您的班级对扩展开放,而无需进行修改。例如,它可能需要处理不同的数据源或记录器。它还可以使课程更容易测试。