Есть ли смысл в глобалах или «злых» синглетонах? - PullRequest
3 голосов
/ 03 февраля 2011

Ранее я использовал Singletons для глобальных классов, если это абсолютно необходимо, то есть ведение журнала, обработка ошибок. Но сейчас я использую модульное тестирование, которое не нравится!

Я хотел бы задать основной вопрос о глобалах. Какой в ​​них смысл? Что не так с созданием нового экземпляра класса, когда он вам нужен?

Ответы [ 2 ]

4 голосов
/ 03 февраля 2011

Вы должны прочитать эту тему: Что плохого в синглетах?

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

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

3 голосов
/ 03 февраля 2011

Это правда, иногда синглтоны могут создавать проблемы, которых у вас не будет без них.

Я пытаюсь дать вам список своих мыслей по этому вопросу:

  • Самое серьезное, что ваше программное обеспечение имеет круговые зависимости.Если вы работаете над архитектурой SOA, это может произойти довольно быстро, если вы не будете осторожны.

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

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

Но иногда синглтон - это хорошая идея, и вам следует придерживаться ее.Даже в AS3 вы можете использовать синглтоны с известным обходным путем конструктора аргументов частного класса.В качестве эвристики, когда не следует использовать синглтоны, я бы посоветовал подумать, нужно ли классу много ссылок на другие синглтоны.И, подумав, вы также можете сделать свои синглеты тестируемыми.

...