c# - 使用配置类或参数实例化对象

标签 c# .net constructor

我遇到了与同事的设计分歧,想听听大家对对象构造函数设计的意见。简而言之,您更喜欢哪种对象构造方法,为什么?

    public class myClass
    {
        Application m_App;

        public myClass(ApplicationObject app) 
        { 
             m_App = app;
        }  
        public method DoSomething 
       { 
         m_App.Method1();
         m_App.Object.Method();
       }
    }

或者

    public class myClass
    {
        Object m_someObject;
        Object2 m_someOtherObject;

        public myClass(Object instance, Object2 instance2) 
        { 
             m_someObject = instance; 
             m_someOtherObject = instance2;
        }  
        public method DoSomething 
       { 
         m_someObject.Method();
         m_someOtherObject.Method();
       }
    }

背景故事是,我遇到了今天关于构建对象的一种看似根本不同的观点。目前,对象是使用 Application 类构造的,该类包含应用程序的所有当前设置(事件日志目标、数据库字符串等...)因此每个对象的构造函数如下所示:

public Object(Application)

许多类单独持有对此应用程序类的引用。在每个类中,根据需要引用应用程序的值。例如

Application.ConfigurationStrings.String1 or Application.ConfigSettings.EventLog.Destination

最初我认为您可以使用这两种方法。问题在于,在调用堆栈的底部调用参数化构造函数,然后在堆栈的较高位置,当新对象期望对应用程序对象的引用存在时,我们遇到了很多空引用错误并看到了设计缺陷。

我对使用应用程序对象来设置每个类的感觉是,它打破了每个对象的封装,并允许应用程序类成为一个包含所有信息的上帝类。当想到这种方法的缺点时,我遇到了问题。

我想更改对象构造函数以仅接受它需要的参数,这样 public object(Application) 就会更改为 public object(classmember1, classmember2 etc...)。目前我觉得这使它更易于测试、隔离更改并且不会混淆要传递的必要参数。

目前,另一位程序员看不出其中的区别,我很难找到示例或更改设计的充分理由,并且说这是我的直觉并且违背了我所知道的 OO 原则并不是一个令人信服的论据。我的设计思想是否偏离了基础?有没有人有任何观点可以支持其中之一?

最佳答案

见鬼,为什么不创建一个名为“Do”的巨大类和一个名为“It”的方法,然后将整个宇宙传递给 It 方法?

Do.It(universe)

让事情尽可能的小。离散意味着当事情不可避免地崩溃时更容易调试。

关于c# - 使用配置类或参数实例化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/398866/

相关文章:

c# - 如何从数码相机中获取录制的视频?

c++ - 我可以使用在类构造函数中初始化的ofstream类型的成员变量吗?

c# - 捕获日志文件的更改

c# - 类型 'System.Int32' 的表达式不能用于返回类型 'System.Object'

c# - 如何使用 C# 将我的模型放入我的 View 中?

c# - 寻找一种在 C# 中使用 float 的更简单方法

c++ - 在构造函数之后初始化 C++ const 字段

java - 类的构造函数不创建类

c# - 使用 pocos 以声明方式定义 xml 序列化

c# - 如何使用 LINQ 删除 List C# 中元素的第一次出现?