Синглтон Vs ServiceLocator - PullRequest
       29

Синглтон Vs ServiceLocator

6 голосов
/ 25 августа 2009

Каковы преимущества и недостатки использования сервис-локатора по сравнению с одиночным? Я читал, что синглтоны - это плохо, но мне интересно, будет ли сервисный локатор вообще лучшим способом сделать что-либо.

Ответы [ 2 ]

10 голосов
/ 25 августа 2009

Оба подхода плохи тем, что из классового контракта неясно, каковы его зависимости. То есть

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

имеет ссылки на SomeSingleton и IProvider глубоко в земле.

Однако, по сравнению с чисто одноэлементным подходом, сервисные локаторы, как правило, намного лучше, так как они обеспечивают более простую централизованную конфигурацию, управление временем жизни и т. Д. Они также обеспечивают лучшую тестируемость (вы всегда можете имитировать вызовы GetService<T>) сцепление, разделение концернов и т. д.

0 голосов
/ 06 июня 2013

если тестируемость важна, использование сервисного локатора намного лучше, чем чистых синглетонов.

...