Учитывая последние тенденции в TDD и так далее, всегда ли объект «менеджер» - плохая идея? - PullRequest
0 голосов
/ 11 июля 2009

Я пишу приложения для различных платформ, но главным образом для OS X и Windows. На то и другое на меня повлияли последние тенденции в разработке через тестирование (TDD), SOLID и так далее. Большую часть этого я нашел отличным советом. Я обнаружил, что если у меня отличное тестовое покрытие, я с большей вероятностью проведу рефакторинг по мере необходимости, потому что я более уверен, что уловлю в своих тестах любые побочные эффекты рефакторинга.

В любом случае, все это приводит меня к моему вопросу: Является ли синглтон "менеджер" всегда плохой идеей? Я пишу приложение Cocoa, которое должно обрабатывать большое количество файлов QuickTime в очереди. В приложении может быть только одна очередь, и она должна быть доступна для нескольких частей приложения, чтобы они могли добавлять элементы в очередь. Я обнаружил, что самый простой способ сделать это с помощью синглтона. Теперь я позаботился о том, чтобы написать этот синглтон в тестируемой форме, поэтому TDD не проблема.

Что бы я заменил синглтоном в этом случае? Какие другие шаблоны проектирования работают и все еще могут быть проверены модулем, если таковые имеются? (Обратите внимание, что этот вопрос следует рассматривать как независимый от языка. Это общий вопрос ОО и TDD.)

Ответы [ 3 ]

6 голосов
/ 11 июля 2009

Причина, по которой одиночные игры плохо подходят для тестируемости, заключается в том, что они ведут себя очень похоже на глобальные (читайте отличную статью Миско Хевери на эту тему здесь ). И поэтому вы получите хрупкие или ненадежные тесты в результате зависимости, которую вы не можете контролировать своими тестами (например, синглтон-классом), не говоря уже о множестве других зол, упомянутых в статье, приведенной выше. *

Внедрение зависимости - это путь, я думаю. Если это становится слишком трудным делом, вы можете рассмотреть возможность использования фабричного шаблона , чтобы изолировать логику, которая устанавливает зависимости. И если вы действительно хотите пройти весь путь с этим, вы можете рассмотреть возможность использования инструмента Inversion of Control, такого как StructureMap .

4 голосов
/ 11 июля 2009

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

2 голосов
/ 11 июля 2009

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

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

...