Вы бы предпочли использовать Синглтон или отправить событие другого класса через Цепочку Ответственности? - PullRequest
2 голосов
/ 02 июня 2010

В целом, что сделает вашу программу более удобной в обслуживании?

Я знаю многих людей, которые активно используют Singletons, но это похоже на отговорку, которая создает своего рода глобальную организацию мусорных ящиков.

Ответы [ 3 ]

3 голосов
/ 02 июня 2010

Судя по некоторым SO-темам, многим людям не нравятся синглтоны по веским причинам. См

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

Без подробностей трудно дать более конкретный ответ.

1 голос
/ 10 июня 2010

Синглтоны являются своего рода глобальными. Кажется, они наносят ущерб модели TDD. Эта страница связана с домашней страницей AsUnit: http://asserttrue.com/articles/2007/07/14/static-classes-singletons-and-the-observer-pattern

Вместо статического доступа к Singleton, выберите передачу или сохранение ссылки на нужный объект. Шаблоны Inversion of Control и Composite полезны вместо Singletons.

1 голос
/ 02 июня 2010

Это очень сильно зависит от проблемы, которую вы пытаетесь решить.

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

Однако, если система должна быть настроена более неудачно, с обработчиком для события, более зависимым от определенного контекста, то синглтон будет слишком тесно связан. Если вы нашли себя с кодом вроде:

if (event == "this")
  do this
else if (event == "that")
  do that

.. в вашем синглтоне, тогда цепь ответственности, вероятно, была бы лучше.

Всегда выбирайте правильный инструмент для правильной работы!

А также не бойтесь менять подходы при необходимости. Если проблема начинается просто, начните с Singleton. Вещи никогда не могут быть более сложными, чем все, и все счастливы. Если со временем все усложняется, и вы замечаете, что вкладываете множество веток в свой одноэлементный код - пора адаптироваться! Разорвите синглтон и включите цепь ... или другой шаблон, если это кажется более подходящим.

Идея сосредоточения внимания на слабосвязанном коде состоит в том, чтобы упростить включение и отключение функциональности, поэтому решение должно существовать столько, сколько нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...