コードを分離するために、サービス ロケーターを使用できますが、これはグローバル変数/状態と同じではありませんか?
これらはしばしばインターフェイスから実行されることを知っているので、インターフェイスを渡して具体的なクラスを取得しますが、それでも私の質問は残っています。
例えば:
class Something {
void DoSomething() {
IMyType myType = ServiceLocator.GetSerivceTypeOf(IMyType);
}
}
ここで、クラスは別の場所で作成された MyType を必要としますが、MyType をチェーンを介して (コンストラクターなどを介して) 渡すのではなく、この方法で取得します。
私は開発者としてのプロとしてのキャリアの早い段階でこの質問をしましたが、それ以前はこのパターンに出くわすことはありませんでした。Anthony は、サービス ロケーターに関する私の意見を明確にしました (したがって、現在はこれが選択された回答です)。提供されたリンクは良い出発点ですが、これまで何度も自分の質問に答えるには、それらはグローバルな状態として機能するため、避ける必要があります。標準の依存性注入を好む;)