Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何组织现场初始化以减少维护开销?_C#_Class - Fatal编程技术网

C# 如何组织现场初始化以减少维护开销?

C# 如何组织现场初始化以减少维护开销?,c#,class,C#,Class,我继承了一个初始化许多私有字段的类-一些是在构造函数中初始化的(请参见dContext),一些是通过字段初始化器初始化的(请参见random) 这令人困惑;重构该类以减少过多字段和初始化的维护开销的最佳方法是什么?您的类有许多依赖项,或者需要一些东西才能完成其工作。它的工作不需要包括创建这样的依赖项。您可以创建一个构造函数来公布这些依赖项是什么,并且类的创建者负责确保类拥有其工作所需的所有工具。(另一种代码方法是将这些依赖项作为属性公开。)然后问题变成“谁提供这些依赖项?谁知道如何构建这个类?”

我继承了一个初始化许多私有字段的类-一些是在构造函数中初始化的(请参见
dContext
),一些是通过字段初始化器初始化的(请参见
random


这令人困惑;重构该类以减少过多字段和初始化的维护开销的最佳方法是什么?

您的类有许多依赖项,或者需要一些东西才能完成其工作。它的工作不需要包括创建这样的依赖项。您可以创建一个构造函数来公布这些依赖项是什么,并且类的创建者负责确保类拥有其工作所需的所有工具。(另一种代码方法是将这些依赖项作为属性公开。)然后问题变成“谁提供这些依赖项?谁知道如何构建这个类?”

你可以考虑工厂的做法。您的类的工作是使用工具执行任何逻辑,而工厂的工作是构建类并提供工具。这是它唯一的责任


如果您将其与这些依赖关系的适当抽象结合起来,您会发现您可以使用符合共享接口但提供不同功能的不同实现来组合类。这可以使您的类对扩展开放,而无需修改。例如,它可能需要处理不同的数据源或记录器。它还可以使类更易于测试。

您的类有许多依赖项,或者需要一些东西才能完成它的工作。它的工作不需要包括创建这样的依赖项。您可以创建一个构造函数来公布这些依赖项是什么,并且类的创建者负责确保类拥有其工作所需的所有工具。(另一种代码方法是将这些依赖项作为属性公开。)然后问题变成“谁提供这些依赖项?谁知道如何构建这个类?”

你可以考虑工厂的做法。您的类的工作是使用工具执行任何逻辑,而工厂的工作是构建类并提供工具。这是它唯一的责任


如果您将其与这些依赖关系的适当抽象结合起来,您会发现您可以使用符合共享接口但提供不同功能的不同实现来组合类。这可以使您的类对扩展开放,而无需修改。例如,它可能需要处理不同的数据源或记录器。它还可以使课堂更容易测试。

我不得不做一些解释来合并你的第二篇文章(7354692)-如果我误解了意思,请编辑等。这表达了你的意图吗?哇,马克是一个心理读取器:p谢谢,我需要网络英语方面的帮助!!我不得不做一些解释来合并你的第二篇文章(7354692)-如果我误解了意思,请编辑等。这表达了你的意图吗?哇,马克是一个心理读取器:P谢谢,我需要互联网英语的帮助!!
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;        
    ...
}
class ReportAuxFactory 
{
     public Report_Aux Create()
     {
          // create dependencies? 
          // instantiate class, provide dependencies 
          return theInstance;
     }
}