コードをデカップリングするには、サービスロケータを持つことができますが、これはグローバル変数/状態と同じではありませんか?サービスロケータはグローバル変数/状態だけではありませんか?
私はこれらのインターフェイスが頻繁に実行されることを知っていますので、インターフェイスを渡して具体的なクラスを取得することができます。例えば
:
class Something {
void DoSomething() {
IMyType myType = ServiceLocator.GetSerivceTypeOf(IMyType);
}
}
ここ
クラスはどこかに作成したのではなく、それは、このように取得された(...を経由して、コンストラクタなど)チェーンを通じてダウンがMyTypeを渡すよりもされたがMyTypeが必要です。
私はこの質問を開発者として私のプロとしてのキャリアの初期に尋ねました。その前に私はこのパターンに遭遇しませんでした。 Anthonyはサービスロケータの意見に私の意見を釘付けにしました(そして、今や選択された答えです)。実際、私はそれらを他者のような反パターンと見ています。提供されたリンクは良い出発点ですが、この後も私自身の質問にいくらか答えなければならないので、彼らはグローバルな国家として行動し、避けるべきです。 )標準的な依存性注入を推奨する。
にも例を参照するか、二人は議論が少し解雇てしまうかもしれません。 –