Подтвердить что ты не робот

Шаблоны проектирования, которые должен знать каждый разработчик?

Каковы шаблоны проектирования, которые должен знать каждый разработчик?

Мне интересен контекст веб-разработчиков Java, работающих с Spring и Hibernate. Я часто слышал, что хорошие знания в шаблонах дизайна необходимы для работы с этими структурами. Может ли кто-нибудь указать особенности?

Например, я знаю, что понимание абстрактных шаблонов factory и factory, singleton pattern и т.д. абсолютно необходимо. Я ищу полный список.

4b9b3361

Ответ 1

Инверсия управления

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

Командная строка и варианты

В Java, в частности, важно научиться передавать часть функциональности другому методу в качестве объекта из-за отсутствия закрытий и указателей функций на языке.

Factory Образец

Фабрики повсеместны в инфраструктуре Java, и важно узнать, почему и когда использовать шаблон factory.

Синглтон (шаблон и анти-шаблон)

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

В целом, изучение почему в отношении шаблонов гораздо важнее как. Знать, когда не применять шаблон, так же важно, как знать, когда.

Ответ 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

Синглтон - синглтоны, по-видимому, могут и должны использоваться для всего