同僚との設計上の意見の相違に直面しており、オブジェクト コンストラクタの設計について意見を求めています。簡単に言うと、どのオブジェクト構築方法を好みますか?またその理由は?
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 クラスへの参照を個別に保持しています。各クラス内では、アプリケーションの値が必要に応じて参照されます。例えば
Application.ConfigurationStrings.String1 or Application.ConfigSettings.EventLog.Destination
最初は、両方の方法を使用できると思いました。問題は、コール スタックの下部でパラメーター化されたコンストラクターを呼び出し、スタックの上部で、新しいオブジェクトがアプリケーション オブジェクトへの参照がそこにあることを期待しているときに、多くの null 参照エラーに遭遇し、設計上の欠陥。
すべてのクラスを設定するためにアプリケーション オブジェクトを使用することについての私の感覚は、それが各オブジェクトのカプセル化を破り、アプリケーション クラスがすべての情報を保持する神のクラスになることを可能にするということです。この方法のマイナス面を考えると、問題が発生します。
public object(Application)
必要な引数のみを受け入れるようにオブジェクトコンストラクターを変更して、 に変更したかったのpublic object(classmember1, classmember2 etc...)
です。これにより、テストが容易になり、変更が分離され、渡す必要のあるパラメーターが難読化されなくなります。
現在、別のプログラマーは違いを認識しておらず、設計を変更する例や正当な理由を見つけるのに苦労しています。それは私の本能であり、私が知っているオブジェクト指向の原則に反するだけであると言うのは説得力のある議論ではありません. 私は私のデザイン思考のベースから外れていますか? どちらか一方を支持して追加するポイントはありますか?