Когда звонить банде четырех? [Когда использовать шаблоны дизайна?]

В Руководство Guerilla для интервьюирования Джоэл говорит, что ребята, которые хотят добиться успеха, но не умны, будут делать глупые вещи, как использование шаблон проектирования посетителя, где достаточно простого массива.

Мне трудно обнаружить, если шаблон дизайна, предложенный Gang of Four, должен быть применен.

Поэтому я хотел бы привести несколько примеров из вашего опыта работы

  • Достаточно ли простого подхода (массив фиксированного размера)?
  • Каков минимальный размер части программного обеспечения, которая оправдывает использование шаблонов GoF?
  • Когда рефакторинг от простого к GoF? Можно ли это сделать разумным способом?

Ответы

Ответ 1

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

  • Когда это простой подход достаточно? Это всегда достаточно использовать простейший подход для получения следующий тест. Но зная когда/как рефакторинг - это настоящее искусство форма.
  • Каков минимальный размер часть программного обеспечения, которая оправдывает использование шаблонов GoF? Правило thumb Я когда-то читал, что когда вы код что-то один раз, отлично, когда вы дублируйте этот код где-нибудь второй раз, сделайте заметку и переместите на. Когда вы обнаружите необходимость в тот же код в третий раз, это время рефакторинг для удаления дублирования и упростить и часто переходя к шаблону проектирования.
  • Когда рефакторинг от простого к GoF? Мне нравится то, что сказал @anopres - это время, когда вы чувствуете боль не имея шаблон дизайна на месте. Боль (или "запах" кода) может проявляется в нескольких отношениях. Дублирование кода является наиболее очевидно. Рефакторинг книг, таких как Fowler Рефакторинг или Кериевский Рефакторинг для Шаблоны перечисляют многие такие боли очков/кодовых штемпелей.
  • Может ли это [рефакторинг] можно сделать разумным путь? Уловкой для рефакторинга является иметь набор модульных тестов на месте с которыми вы доверяете, и затем в рефакторинг без каких-либо из этих тестов терпеть неудачу. Рефакторинг, по определению, не измените функциональность вашего код. Поэтому, если ваши тесты продолжить, вы можете иметь довольно хорошее ощущение, что вы не сломать что угодно. Хотя это может быть сложно, я действительно наслаждаюсь этой частью TDD, это почти как игра, чтобы вносить изменения, не нарушая никаких тестов.

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

Ответ 2

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

Только на следующий день на собрании команды вы спасете каждые тридцать минут от скуки, сказав: "Я использовал стратегию, все они работают одинаково, поэтому есть только одна тестовая программа, она требует параметров для изменения тестового примера".

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


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

Ответ 3

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

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

Ответ 4

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

Лучший совет, который я могу дать, - учиться, учиться, учиться.

Ответ 5

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

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

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

Ответ 6

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

Ответ 7

Одна из приятных вещей в оригинальной книге GoF заключается в том, что есть обсуждение сценариев, где шаблон лучше всего разрешит проблему. Рассмотрение этих обсуждений может помочь вам определить, "если это время".

Еще одно хорошее место для начала - с шаблонами дизайна First First. Упражнения, иллюстрирующие использование разных шаблонов дизайна, достаточно сложны, чтобы обеспечить хороший опыт обучения. Кроме того, упражнения также основаны на реальных сценариях, поэтому никогда не нужно видеть, когда подходящее время применяют шаблоны проектирования.