7

シングルトンに対してサービスロケーターを使用することの長所と短所は何ですか?シングルトンは悪いことを読んだことがありますが、ServiceLocatorが一般的に物事を行うためのより良い方法であるかどうか疑問に思っています。

4

2 に答える 2

12

どちらのアプローチも、その依存関係が何であるかがクラスコントラクトから明らかでないという点で悪いです。あれは、

private void foo()
{
    var x = SomeSingleton.Instance.GetX();
    var y = ServiceLocator.GetService<IProvider>().GetY();
}

参照がSomeSingletonあり、IProvider内部のどこかに深く埋もれています。

ただし、純粋なシングルトンアプローチと比較すると、サービスロケーターは一般に、一元化された構成やライフタイム管理などが簡単になるという点ではるかに優れています。また、テスト容易性(いつでも呼び出しをモックできるGetService<T>)、結合の低下、関心の分離などが可能になります。等

于 2009-08-25T13:32:07.990 に答える
1

テスト容易性が懸念される場合は、サービスロケーターを使用する方が純粋なシングルトンよりもはるかに優れています。

于 2013-06-06T10:28:10.520 に答える