私は3つの主要なクラスを持っています。A、B、Cと言います。 AはBとCの両方をインスタンス化します。BはまたCに依存します。これは問題ありません。 私の問題は、Aの実装がBとCの実装と密接に結びついていることです。 これをデカップリングしたいと思います。 私は春のフレームワークを使いたくありません。他の方法はありますか?私は彼らの(B、C)初期化のための工場を作ることを考えましたが、それはAまたはCがBにアクセスする必要があるときはいつでも、工場の新しいインスタンスを作成しなければならないことを意味します。 これをどのように解決すればよいですか? ここでIOCコンテナが便利かどうか分かりません。依存性注入混乱の実装
0
A
答えて
1
A
は、B
またはC
を直接インスタンス化するべきではありません。その代わりに、コンストラクタのパラメータとしてのインスタンスを受け入れるべきである:
public class A
{
private B b;
private C c;
public A(B b, C c)
{
this.b = b;
this.c = c;
}
}
// When creating your object graph, in the "composition root":
B b = new B();
C c = new C(b);
A a = new A(b, c);
これは、これらの依存関係(したがって、依存性注入)でそれを注入することにより、B
sおよびC
Sをインスタンス化の詳細からA
を切り離します。 実装からA
を分離するために
、あなたはA
が気にすることをB
とC
の機能のためのインタフェースを作成することをお勧めします。言って、Bable
とCable
。 A
は、コンストラクタパラメータとしてBable
とCable
を受け入れることができ、それらのインタフェースを実装するクラスや実装の仕組みには関係なく、Bable
とCable
という契約に準拠しています。ここで
は、私が何を言っているかの完全に肉付けアウト例です:https://gist.github.com/2402514
0
あなたはコンクリートがメンバ変数として保存、そのコンストラクタで使用すべきオブジェクトを指定することができます。この方法は、あなたが同様にC/CIfaceため
public class A
{
private BIface b;
private CIface c;
public A(BIface b, CIface c) {
this.b = b;
this.c = c;
}
}
interface BIface {
// required B methods
}
public class B implments BIface
{
// implement the interface
}
それを使用して(すなわち、Bと同じインターフェースを実装する)オブジェクトを複数回作成する必要はありませんし、他のクラスのオブジェクトを供給することができますこのように:
BIface c = new C(); // or some other class also implementing CIface
BIface b = new B(c); // or some other class also implementing BIface
A a = new A(b, c);
関連する問題
- 1. Zendframework2依存性注入の混乱
- 2. スプリング依存性注入スコープの混乱
- 3. リポジトリパターンによる依存性注入を実装する混乱 - C#EFコア
- 4. MVVMCと依存性注入の実装
- 5. 依存性注入の実装角度
- 6. Scala.jsプラットフォーム依存メソッドの実装(または依存性注入)
- 7. IWindsorInstallerの実装への依存性の注入
- 8. 親クラスとの依存性注入の実装?
- 9. 匿名実装へのSpring依存性注入
- 10. 依存性注入、再コンパイルなしの実装変更
- 11. 依存性注入
- 12. 依存性注入
- 13. 依存性注入
- 14. Zend Framework依存性注入対Symfony2依存性注入
- 15. 依存性注入を使用した依存性注入器の注入
- 16. Groovyの依存性注入
- 17. コンストラクターの依存性注入
- 18. ApiControllerの依存性注入?
- 19. バリデータの依存性注入
- 20. 春の依存性注入
- 21. XPCOMの依存性注入
- 22. 依存性注入のクエリ
- 23. Javaの依存性注入
- 24. 依存性の注入
- 25. ダイナミックランタイム依存性の注入
- 26. 依存性の注入
- 27. Scalaの依存性注入
- 28. MVCの依存性注入
- 29. 依存性の注入
- 30. カプセル化と依存性注入の混合
これは明らかではありません。なぜAはBとCの実装に「緊密に結合」されていますか?簡単なサンプルコードを表示できますか? –