Шаблоны проектирования, которые должен знать каждый разработчик?
Каковы шаблоны проектирования, которые должен знать каждый разработчик?
Мне интересен контекст веб-разработчиков Java, работающих с Spring и Hibernate. Я часто слышал, что хорошие знания в шаблонах дизайна необходимы для работы с этими структурами. Может ли кто-нибудь указать особенности?
Например, я знаю, что понимание абстрактных шаблонов factory и factory, singleton pattern и т.д. абсолютно необходимо. Я ищу полный список.
Ответы
Ответ 1
Если вы когда-либо собираетесь разрабатывать развязанные системы, вам нужно будет знать, как правильно связывать зависимости между классами.
В Java, в частности, важно научиться передавать часть функциональности другому методу в качестве объекта из-за отсутствия закрытий и указателей функций на языке.
Фабрики повсеместны в инфраструктуре Java, и важно узнать, почему и когда использовать шаблон factory.
Изучение того, как использовать шаблон singleton ответственно, очень полезно для понимания подводных камней в коде других людей, которые вы можете читать.
В целом, изучение почему в отношении шаблонов гораздо важнее как. Знать, когда не применять шаблон, так же важно, как знать, когда.
Ответ 2
Контроллер Model-view просто должен быть в списке, Spring имеет структуру MVC:
http://en.wikipedia.org/wiki/Model-view-controller
Ответ 3
Все должны знать о Синглтоне, но также и не использовать его! В настоящее время это источник боли для меня в проекте на работе.
Синглтоны делают код трудным для понимания и следуют за ним, а сделать тесты на блок-записи намного сложнее. Мне нравится сообщение в блоге Синглтоны - это патологические лжецы.
Ответ 4
Большинство шаблонов проектирования довольно очевидны - вы уже знаете и используете их, если вы программируете несколько лет.
Самое большое преимущество, которое я нашел для разработки шаблонов, - это общий набор имен. Если кто-то говорит "Обратный звонок", что может означать немало вещей, но если кто-то говорит "Образец слушателя", это означает более конкретный набор вызовов и подразумевает связь более высокого уровня между объектами.
Итак, по сути, прочитайте хорошую книгу моделей дизайна, получите представление о названии каждого шаблона, потратите некоторое время на понимание того, что вы не знаете, и вам хорошо идти.
Я бы не стал полностью игнорировать любого из них - они все хорошо видели. Вы должны уметь распознавать ситуацию, которая может выиграть от определенного шаблона, и знать, где искать, чтобы узнать больше об этом.
Ответ 5
Я рекомендую вам прочитать книгу Head First Design Patterns. Это хорошо написанная книга обо всех достояниях и полезных шаблонах.
Ответ 6
Я бы порекомендовал вам получить и прочитать книгу "Шаблоны дизайна", поскольку он дает вам словарь.
Ответ 7
Но не забудьте основы:)
Интервью с разработчиками Java со слезами на глазах
http://java.sys-con.com/node/1040135
Ответ 8
Hibernate? Тогда Unit of Work является обязательным http://martinfowler.com/eaaCatalog/unitOfWork.html
Композитный, он присутствует в структуре JUnit. (Тест-TestCase-TestSuite)
Шаблоны Adapter, Builder, Command, Template Method и Strategy легко и часто можно использовать на практике.
Шаблон State также помог мне очистить беспорядок в унаследованных исходных кодах.
Ответ 9
Это будет комментарий к ссылке Грега Хьюджилла "Синглтоны являются патологическими лжецами", но я пока не могу комментировать.
В этой статье делается убедительный пример, но его ошибка неверна. Как отметили несколько комментаторов в своем блоге, его проблема - действительно глобальное состояние. Его исправление кода по-прежнему может использовать синглтоны и все же получить точное увеличение ясности и тестируемости.
Перечитайте статью. Он не побеспокоился о том, что автономному окну OnQuue нужен инициализированный экземпляр базы данных, или что CreditCardProcessor нуждается в инициализированном автономном режиме. Он побеспокоился, что эти зависимости не видны, что вызывает проблемы с ремонтопригодностью и тестируемостью.
Его проблема заключается в секретном глобальном состоянии (это делает меня похожим на теоретика заговора?).
Однако он (имо) неверно истолковал это секретное глобальное состояние как вину одиночных.
Это не значит, что я выступаю за синглтоны, где они не нужны - конечно, у них есть недостатки (в том числе очевидная возможность узких мест в конфликте с конфликтами). Но я предпочитаю четко понимать, какие практики я избегаю.
Кстати, я бы пошел дальше в моем рефакторинге - основанный на именах классов, я бы утвердил в обзоре кода, что CreditCardProcessor должен обработать обвинения, поэтому вместо его:
card.charge(cardProcessor, 100);
У меня было бы это, вместо этого:
cardProcessor.chargeCard (card, 100);
(и да, я заменил его имена переменных c
и ccp
именами, которые я считал более читаемыми)
Ответ 10
Помимо шаблонов Abstract factory
, Factory Method
и Singleton
, которые вы уже цитировали, я думаю, что ниже шаблоны полезны.
Шаблон моста: абстракция и реализация могут изменяться независимо
Рисунок декоратора: изменение поведения объекта во время выполнения
Шаблон медиатора. Включите центральную среду связи между различными объектами.
Цепочка ответственности. Если вы добавляете фильтры к запросу веб-службы, это очень полезно.
Шаблон стратегии. Если вы хотите изменить алгоритм из семейства алгоритмов во время выполнения, проверив параметр
Шаблон фасада. Если у вас много служб в вашей системе и вы не хотите выставлять все сервисы клиенту, у вас есть один класс Facade, который будет взаимодействовать с другими службами.
sourcemaking предоставляет отличные сведения о каждом шаблоне проектирования: Intent, Strucutre, контрольный список и правила большого пальца.
Еще один вопрос SE определенно поможет вам:
Веб-приложения с шаблонами проектирования
Ответ 11
Синглтон - синглтоны, по-видимому, могут и должны использоваться для всего