私は、文字列ベースの「サービス ロケータ」の概念にまつわる混乱に苦しんでいます。
まず第一に、IoC は優れており、インターフェイスへのプログラミングが最適です。しかし、ここで使用されているイエローページ パターンのどこに大きな利点があるのか、コンパイル不要の再構成可能性を除けば、私にはわかりません。
アプリケーション コードは、(Spring) コンテナーを使用してオブジェクトを取得します。コードは必要なインターフェイス (キャスト先)、Spring コンテナー インターフェイス、および必要なオブジェクトの名前のみを知る必要があるため、多くの結合が削除されます。
public void foo(){
((MyInterface) locator.get("the/object/I/need")).callMe();
}
もちろん、ロケーターには、あらゆる種類のObject
派生物の無数のオブジェクトを取り込むことができます。
しかし、オブジェクトを名前で取得する「柔軟性」が、実際にはタイプセーフでなくルックアップセーフでない方法で依存関係を隠しているという事実に少し当惑しています。そしてそれは型であり、今ではそのすべてが実行時段階に延期されています。
私が考えることができる最も単純で機能的に問題のないパターンは、struct
オブジェクトのようなアプリケーション全体の巨大なパターンです。
public class YellowPages {
public MyInterface the_object_i_need;
public YourInterface the_object_you_need;
....
}
// context population (no xml... is that bad?)
YellowPages locator = new YellowPages();
locator.the_object_i_need=new MyImpl("xyx",true),
locator.the_object_you_need=new YourImpl(1,2,3)
public void foo(){
locator.the_object_i_need.callMe(); // type-safe, lookup-safe
}
要求されたオブジェクトを解決するようにコンパイラに依頼し、そのタイプが問題ないかどうかを確認する方法/パターン/フレームワークはありますか? それも行うDIフレームワークはありますか?
どうもありがとう