2011-02-03 1 views
3

Я ранее использовал Singletons для глобальных классов, если это абсолютно необходимо, т. Е. Протоколирование, обработка ошибок. Но теперь я использую модульное тестирование, которое им не нравится!Есть ли какая-либо точка в глобальном или «злом» синглетонах

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

+1

«Я хотел бы задать основной вопрос о глобальных значениях. Какой смысл в них? Что не так с созданием нового экземпляра класса, когда вам это нужно?» Я думаю, что я не понимаю ваш вопрос. Нет ничего плохого в создании нового экземпляра класса, когда вам это нужно ... – iuiz

+0

Позвольте мне пояснить, указав пример: с приложением, использующим ведение журнала в каждом отдельном классе, не является ли плохая идея создать экземпляр log class каждый раз, в отличие от использования singleton, который обращается к тому же экземпляру класса ведения журнала? Предположительно, это будет использовать больше памяти? Я чувствую, что у меня есть кое-какие знания, но мне не хватает оснований! @iuiz –

ответ

3

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

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

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

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

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

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

4

вы должны прочитать эту тему: SO What is so bad about Singletons?

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

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