2008-09-17 5 views
53

Любой может прочитать книгу GoF, чтобы узнать, какие шаблоны дизайна и как их использовать, но каков процесс определения, когда шаблон дизайна решает проблему? Знает ли образец шаблона дизайн, или есть способ выяснить, как шаблон можно использовать для изменения дизайна?Откуда вы знаете, когда использовать шаблоны дизайна?

Другими словами, существуют ли шаблоны для шаблонов?

ответ

33

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

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

38

Я очень рекомендую читать Head First Design Patterns от O'Reilly. Это объясняет, как эти шаблоны можно использовать в реальном мире.

Head First Design Patterns

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

+1

Да, у меня есть эта книга. Это действительно хорошо. Мне не нужны примеры (утки и пицца и еще много чего), но это дает прочную основу для дизайна. – 2008-09-17 19:22:06

+4

Но примеры в этой книге (с пиццей, шоколадными фабриками и т. Д.) Действительно помогают вам понять концепцию и идею о каждом шаблоне. – 2009-06-14 02:33:01

+0

Похоже, что образец дизайна вводится в мозг. Действительно потрясающая книга. – Jnana 2017-11-13 08:58:29

6

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

+0

И одно из лучших мест, где вы узнаете, как распознавать шаблоны дизайна, находится в кодировке Dojo, где участники участвуют в «преднамеренной практике» с игрушечными проблемами (см. Http://en.wikipedia.org/wiki/Kata_(programming)). Иногда локальные группы пользователей принимают доджо. Но, даже если вы не можете найти додзе, чтобы присоединиться к нему, есть большая ценность в том, чтобы бегать через ката в одиночку. – 2013-11-14 02:27:48

4

Еще одна интересная книга, которую я нашел, было:

Рефакторинг с использованием шаблонов

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

2

Как вы узнали, когда использовать оператор if?

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

3

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

2

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

Другое дело, что большинство книг намеренно не относится к конкретному языку, что может быть для вас как хорошим, так и плохим. Однако важно понимать шаблон вообще, не менее важно знать, как его реализовать хорошо. Я столкнулся с книгой под названием C# 3.0 Design Patterns, которая посвящает почти равные чернила обеим из этих неотделимых аспектов.

2

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

7

Дизайн шаблонов? Ты впитываешься в них!

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

Вы не можете избежать использования шаблонов при программировании. Но вы можете больше узнать о шаблонах, которые вы используете, и о том, когда определенные шаблоны полезны, а когда нет. Изучение канонических шаблонов дизайна от GoF book поможет, как и узнать о code smells and refactoring. Нет никакого правильного ответа, когда нужно использовать конкретный шаблон дизайна или дизайна, вам нужно создать опыт использования и реализации, чтобы узнать, когда и где использовать шаблон.

11

Включите вопрос: шаблон mtch, который вы должны делать, - «какой шаблон подходит моей проблеме». Рассмотрим действительно простой шаблон, находящий элемент в массиве. в C, это что-то вроде

TYPE_t ary[SIZE] = // ... gets initialized somehow 
size_t ix ;  // Your index variable 

for(ix=0; ix < SIZE; ix++){ 
    if (ary[ix] == item) { 
     return ix ; 
    } 
} 

Вы не смотрите на код и думать «где я могу использовать это», вы смотрите на эту проблему и сказать: «я знаю, как найти элемент в массиве ?»

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

Когда вы изучаете шаблоны, особенно GoF, спрашивайте себя: «Какие ситуации требуют этого шаблона? Я видел этот шаблон раньше? Что я мог использовать для предыдущей работы? Где я могу найти пример этого в моя собственная жизнь? "

11

Существует основная концепция, лежащая в основе шаблонов, которые большинство людей не испытывает. Не думайте о них как о структурах данных или о алгоритмах.

Вместо этого подумайте о своем коде как о том, как люди отправляют сообщения, например, передавая заметки или отправляя письма друг другу. Каждый объект является «человеком».

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

2

Концепция шаблона проектирования была взята из структурной инженерии, как и многие практики в разработке программного обеспечения. Если вы планируете строить структуру, то необходимо принять решения о том, как построить эту структуру для достижения поставленных целей. При принятии этих решений у вас будет набор требований к работе. Это может быть нечто простое, так как мост должен иметь возможность поддерживать X тонн за один раз или иметь определенную силу растяжения, чтобы обеспечить достаточное движение на ветру и т. Д. Архитектор использовал бы предварительные знания о других сборках, чтобы сделать эти варианты дизайна. Он/она вряд ли попытается решить проблему с нуля.

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

4

Rian van der Merwe написал excellent article об этом для Smashing Magazine в июне 2012 года. Вот несколько важных точек маркера.

Дизайн модели полезны по двум причинам:

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

ван дер Мерве рекомендует рассматривать ломая образцы, когда:

  1. Новый способ эмпирически улучшает удобство использования, или
  2. Установленный способ устаревает.
0

Дизайн шаблон является общее описание о том, как решить общая проблема. Там вы 2 вещи, которые мы должны обратить внимание на:

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

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

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

Смежные вопросы