簡単な質問がありますが、答えがあるかどうかさえわかりませんが、試してみましょう。私はC++でコーディングしており、依存性注入を使用してグローバル状態を回避しています。これは非常にうまく機能し、予期しない/未定義の動作を頻繁に実行することはありません。
しかし、私のプロジェクトが成長するにつれて、ボイラープレートと見なす多くのコードを書いていることに気づきました。さらに悪いことに、実際のコードよりもボイラープレートコードが多いという事実により、理解が難しい場合があります。
良い例に勝るものはないので、行きましょう:
Timeオブジェクトを作成するTimeFactoryというクラスがあります。
詳細(関連性があるかどうかはわかりません):Timeはさまざまな形式を持つ可能性があり、それらの間の変換は線形でも単純でもないため、Timeオブジェクトは非常に複雑です。各「Time」には、変換を処理するためのシンクロナイザーが含まれています。正しく初期化された同じシンクロナイザーがあることを確認するために、TimeFactoryを使用します。TimeFactoryにはインスタンスが1つしかなく、アプリケーション全体であるため、シングルトンの対象になりますが、可変であるため、シングルトンにはしたくありません。
私のアプリでは、多くのクラスがTimeオブジェクトを作成する必要があります。これらのクラスは、深くネストされている場合があります。
クラスBのインスタンスを含むクラスAがあり、クラスDまでというようになります。クラスDはTimeオブジェクトを作成する必要があります。
私の素朴な実装では、TimeFactoryをクラスAのコンストラクターに渡し、クラスAのコンストラクターにTimeFactoryを渡し、クラスDまでクラスBのコンストラクターに渡します。
ここで、TimeFactoryのようなクラスがいくつかあり、上記のようなクラス階層がいくつかあると想像してください。依存性注入を使用すると、柔軟性と可読性がすべて失われます。
私のアプリに大きな設計上の欠陥がないかどうか疑問に思い始めています...それとも、これは依存性注入を使用するために必要な悪ですか?
どう思いますか ?