Помимо " что плохого в синглетах " :-), у меня есть веб-приложение ASP.NET, которое использует синглеты на уровне бизнес-логики, таким образом:
public class MyBusinessService
{
private static MyBusinessService mInstance = null;
public static MyBusinessService Instance
{
get { return mInstance; }
}
static MyBusinessService()
{
mInstance = new MyBusinessService();
}
}
Мы используем их главным образом для зависимости в Model View Presenter архитектуре.
Они также могут использоваться в классах бизнес-логики одним из двух способов.Во-первых, следующим образом:
var myService = new MyBusinessService();
myService.DoSomething();
myService.DoSomethingElse();
Или его можно использовать следующим образом:
MyBusinessService.Instance.DoSomething();
MyBusinessService.Instance.DoSomethingElse();
Какая конструкция предпочтительнее и почему?Меня не интересует, является ли сам шаблон синглтона хорошим или плохим.
Обновление: Хорошо, этот вопрос кажется довольно популярным.Я думаю, это квази-синглтон.Худший из обоих миров!Я не очень заинтересован в рефакторинге шаблона / анти-шаблона / кода ада.Меня больше интересует понимание эффектов обоих описанных способов использования.
Наше представление (страница ASP.NET) выглядит следующим образом:
var presenter = new SomeViewPresenter(this, MyBusinessService.Instance);
, но в качестве альтернативы может быть реализовано как:
var presenter = new SomeViewPresenter(this, new MyBusinessService());
Я предпочитаю первое в этом случае.NB. Использование слова singleton и неправильное использование, приведенное выше, понятно, но как обстоят дела с кодом, каков результат двух оригинальных вариантов?