Синглтон или нет - PullRequest
       18

Синглтон или нет

9 голосов
/ 17 декабря 2009

У меня запущена служба Windows. Внутри этой службы я разместил некоторую службу (WCF). Мне нужен какой-то класс "в памяти". Цель этого класса - хранить непостоянные данные, пока работает служба Windows. Этот класс должен быть доступен через службы WCF. Они помещают некоторые значения в этот класс или получают некоторые значения из этого класса.

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

Так есть ли альтернатива для такой ситуации? Или синглтон для этого нормально? Как насчет метода Фабрики? Но тогда Где я могу найти ссылки на объекты?

Ответы [ 3 ]

15 голосов
/ 17 декабря 2009

Шаблон проектирования Singleton действительно должен быть помечен как анти-шаблон. Это зло . Не используйте его.

Лучшая альтернатива - использовать Внедрение зависимостей (DI) и внедрить класс, который можно использовать для хранения непостоянных данных, которые вам нужны.

Многие люди не понимают, что WCF поддерживает шаблоны Dependency Injection (DI), такие как Constructor Injection без особых хлопот.

Если вы внедрили внедренный класс как долгоживущий объект (обычно называемый синглтоном стиль жизни , но его не следует путать с шаблоном проектирования синглтона), вы можете продолжать обращаться к одному и тому же экземпляру между вызовами .

Однако всякий раз, когда вы используете общие объекты (используете ли вы Singleton как шаблон проектирования или стиль жизни), вы должны быть готовы к решению проблем с многопоточностью .

Среди прочего, в этом посте описывается, как внедрить зависимости в реализацию службы WCF, когда у нее нет конструктора по умолчанию.

6 голосов
/ 17 декабря 2009

Мне интересно узнать, почему людям не нравится синглтон, я бы с радостью использовал его для вышеописанного сценария, если бы кто-то не объяснил мне несколько веских причин, почему нет.

Это простой шаблон для понимания и реализации, и я думаю, что сохранять его простым - это хорошая вещь через 6 месяцев, когда вы или кто-то другой должен поддерживать ваш код

EDIT Проделав еще несколько исследований о том, почему некоторым людям не нравится шаблон синглтона, в вопросе рассматривается вопрос: Что является альтернативой синглтону Это связано с недостатками модульного тестирования шаблона.

РЕДАКТИРОВАТЬ 2 Я наконец убежден, что сингелтон может быть плохим. http://googletesting.blogspot.com/2008/08/by-miko-hevery-so-you-join-new-project.html хорошо показывает, что с точки зрения обслуживания объявление зависимости на уровне API облегчает программистам контроль над зависимостями.

1 голос
/ 17 декабря 2009

Зачем вам для этого синглтон?

Вам действительно нужно ограничить количество экземпляров этого класса одним экземпляром? Если нет, не используйте синглтон - он вам не нужен, и это только усложнит ваш класс.

...