この種の設計のオブジェクトはたくさんあります: インターフェイスといくつかの実装、および構成によるいくつかのオブジェクトの使用。例 : Foo は IFoo を実装し、IBar を実装する Bar オブジェクトを持っています。また、依存関係を注入するための setBar(IBar bar) メソッドも持っています。
私の質問は次のとおりです。セッターはインターフェイスにいるべきではありませんか? (テスト、モッキングのために...私は立ち往生しています!)
モックとテストのためだけにインターフェイスにセッターを配置するのは良くありません。したがって、そのオブジェクトのプロパティはおそらく構築後に変更できないはずですが、そのインターフェイスのユーザーに任意のセット コンポーネントへのアクセスを許可します。インターフェイスは、オブジェクトの構築方法を明らかにすべきではありません。
セッター注入を使用して Bar を Foo に注入します。Bar なしでは Foo が存在できないコンテキストでは、Bar にコンストラクターを挿入する方が適切です。
さらに読む:依存性注入の種類
ポリモーフィズムを使用している場合、つまりインターフェイス タイプでセッターを呼び出している場合は、明らかにインターフェイスでそれが必要です。