Что должно быть на первом месте - шаблон дизайна или код?

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

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

Мне также интересно, есть ли шаблоны проектирования, которые не определены GoF, но могут быть столь же ценными? Если да, то какие есть полезные ресурсы для информирования себя об этом?

8 ответов

Решение

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

Если шаблон явно не выпадает из спецификации, я не обязательно буду пытаться выбрать что-то из GoF и решить проблему, пока она не будет соответствовать шаблону.

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

  1. Выясните варианты использования.
  2. Подумайте о дизайне, глядя на существующий шаблон дизайна.
  3. Начните реализовывать.

Я считаю, что главная цель здесь - не изобретать велосипед.

PS. После того, как вы пройдете шаг 2 в течение нескольких раз и привыкнете к нему, вы сможете интегрировать этот шаг в шаг 3.

Если я не уверен, я просто начинаю писать код. Вскоре структура начнет просить некоторого рефакторинга, и выбор почти всегда очевиден.

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

Я также не боюсь сжечь и перестроить части программы. Есть цитата, которая мне очень нравится от Скотта Адамса: "Творчество позволяет себе делать ошибки; искусство знает, какие из них оставить". Иногда правильный ответ не очевиден, пока вы не попробуете его неправильно.

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

Откомандирован! Некоторые из худших спагетти, которые я видел, - это OO C++ с множеством шаблонов. Fluxbox едва терпимый; Синергия (v2) варить, жарить и печет мою лапшу:(

И некоторые из самых красивых кодов, которые я видел, это OO C, где OO было два интерфейса плюс 4 и 20 реализаций соответственно.

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

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

Хороший совет здесь уже. Чтобы ответить на вопрос о полезных шаблонах, кроме книги GoF. Есть, вы должны проверить Лармана Применение UML и Шаблоны, где он описывает шаблоны GRASP.

Другие вопросы по тегам