Шаблоны проектирования, которые должен знать каждый разработчик? - PullRequest
26 голосов
/ 08 августа 2009

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

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

Например, я знаю, что понимание абстрактной фабричной и фабричной модели, одиночной модели и т. Д. Абсолютно необходимо Я ищу полный список.

Ответы [ 11 ]

19 голосов
/ 08 августа 2009

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

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

Шаблон команды и варианты

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

Заводская модель

Фабрики вездесущи в Java-фреймворках, и важно понять, почему и когда использовать шаблон фабрики.

Синглтон (рисунок и анти-рисунок)

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

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

5 голосов
/ 08 августа 2009

Каждый должен знать о Singleton, но также и когда не , чтобы использовать его! В настоящее время это является источником большой боли для меня на проекте на работе.

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

4 голосов
/ 08 августа 2009

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

Самое большое преимущество, которое я обнаружил при разработке шаблонов, - это общий набор имен. Если кто-то говорит «Обратный вызов», это может означать довольно много вещей, но если кто-то говорит «Шаблон слушателя», это означает более конкретный набор вызовов и подразумевает отношения более высокого уровня между объектами.

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

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

4 голосов
/ 08 августа 2009

Модель – представление – контроллер просто должна быть в списке, Spring имеет инфраструктуру MVC:

http://en.wikipedia.org/wiki/Model–view–controller

3 голосов
/ 08 августа 2009

Я рекомендую вам прочитать Head First Design Patterns книгу. Это хорошо написанная книга обо всех простых и полезных шаблонах.

2 голосов
/ 08 августа 2009

Но не забывайте об основах:)

Интервью разработчиков Java со слезами на глазах http://java.sys -con.com / узел / 1040135

2 голосов
/ 08 августа 2009

Я бы порекомендовал вам взять и прочитать книгу Design Patterns, так как она дает вам словарный запас.

1 голос
/ 28 января 2016

Помимо шаблонов Abstract factory, Factory Method и Singleton, которые вы уже цитировали, я думаю, что приведенные ниже шаблоны полезны.

Шаблон моста : Абстракция и реализация могут изменяться независимо

Шаблон декоратора : изменение поведения объекта во время выполнения

Шаблон посредника : Включить центральную среду связи между различными объектами

Цепочка ответственности : Если вы добавляете фильтры в запрос веб-службы, это очень полезно.

Шаблон стратегии : Если вы хотите изменить алгоритм из семейства алгоритмов во время выполнения, проверив параметр

Шаблон фасада : Если в вашей системе много служб и вы не хотите предоставлять все эти услуги клиенту, используйте один класс Facade, который будет взаимодействовать с другими службами.

sourcemaking предоставляет отличную информацию о каждом шаблоне проектирования: Намерение, Strucutre, Контрольный список и практические правила.

Вам наверняка поможет еще один вопрос SE:

Веб-приложения Design Patterns

1 голос
/ 08 августа 2009

Это был бы комментарий к упоминанию Грега Хьюгилла «Одиночки - патологические лжецы», но я пока не могу комментировать.

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

Перечитайте статью. Он не обеспокоен тем, что OfflineQueue нуждается в инициализированном экземпляре базы данных или что CreditCardProcessor нуждается в инициализированном OfflineQueue. Он обеспокоен тем, что эти зависимости не видны, что вызывает проблемы с ремонтопригодностью и тестируемостью.

Его проблема с секретным глобальным состоянием ( это заставляет меня звучать как теоретик заговора? ).

Тем не менее, он (imo) неверно истолковывает это секретное глобальное состояние как ошибку одиноких.

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

Кстати, я бы пошел дальше в своем рефакторинге - основываясь на именах классов, я бы утверждал в обзоре кода, что CreditCardProcessor должен, ну, в общем, обрабатывать начисления, поэтому вместо его:

    card.charge(cardProcessor, 100);      

Вместо этого я бы получил:

    cardProcessor.chargeCard (card, 100);

(и да, я заменил его имена переменных c и ccp именами, которые я считал более читабельными)

1 голос
/ 08 августа 2009

гибернации? Тогда Единица работы является обязательной http://martinfowler.com/eaaCatalog/unitOfWork.html

Композитный, он присутствует в фреймворке JUnit. (Test-TestCase-TestSuite)

Шаблоны «Адаптер», «Конструктор», «Команда», «Метод шаблона» и «Стратегия» просты и часто используются на практике.

Шаблон State также помог мне убрать беспорядок в унаследованных исходных кодах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...