Может кто-нибудь объяснить одержимость шаблонами и анти-шаблонами в программировании? Я спрашиваю, потому что я понятия не имею, что означает любой из паттернов. Когда я сталкиваюсь с задачей программирования, я немного думаю о проблеме, записываю некоторые структуры данных, которые, на мой взгляд, будут актуальны, создаю прототип решения, выделяю некоторые модули и выполняю итерации. Нигде в процессе я не думаю: «О, мне нужен шаблон FunkyLookyTastic здесь».
16
Ответы:
Шаблон - это общий подход к решению общей проблемы; Не больше, не меньше. Зная и понимая их, вы можете использовать опыт других людей, чтобы направить вас к решению, которое, как было показано, работает хорошо, избежать ошибок, с которыми встречались в прошлом, и обсудить решение, используя терминологию, знакомую другим, кто знать эту модель.
Конечно, вы можете придумать хорошее решение без явного использования шаблона, и в равной степени вы можете найти плохое решение, пытаясь применить шаблон, который не соответствует вашей конкретной проблеме. Я думаю, что «навязчивая идея», которую вы наблюдаете, обычно исходит от людей, которые только что открыли эту концепцию, и думают, что она довольно сильна, чем на самом деле. Большинство людей быстро узнают их за то, что они есть: полезный инструмент, а не волшебная пуля.
С другой стороны, антишаблоны - это обычно наблюдаемые поведения, которые имеют тенденцию снижать качество кода. Опять же, полезно знать и понимать некоторые из них, чтобы вы могли избежать такого поведения и попытаться исправить его (с аргументированными аргументами), когда вы наблюдаете это в других. Некоторые описывают чрезмерное использование шаблонов как анти-шаблон.
источник
Шаблоны - это как богатый опыт программистов в кулинарной книге, так и полезный способ общения программистов.
Как показывают другие ответы, шаблоны действительно являются общими решениями общих проблем. Преимущество заключается в том, что вы часто можете получить более эффективные решения, используя существующий шаблон или обнаружив возможные ловушки, прежде чем приступить к кодированию.
Другое преимущество, когда вы говорите с кем-то о своем коде. Шаблоны - это другой тип жаргона, который объединяет длинные описания в несколько слов. Попробуйте объяснить «тогда у нас есть фабричный наблюдатель», не обращаясь к шаблонам. Вы можете сделать это, но это занимает много времени.
источник
Большинство разработчиков будут недовольны любой новой парадигмой или методологией, которая появляется. Я сделал это, когда впервые услышал о шаблонах проектирования. Шаблоны дизайна - это то, что предлагает название: дизайн или шаблон для создания классов и моделирования их поведения и взаимодействия предсказуемым образом.
Посмотрите на дома. У них есть некоторые сходства. В каждом доме есть гостиная, кухня, спальня, ванная комната, туалет как минимум. Никто не построит дом без ванной, верно? Квартиры имеют рисунок, который отличается от бунгало. У замков совсем другая картина. Одежда тоже имеет узоры. Куртка и формальная рубашка имеют одинаковый базовый дизайн, но ведут себя по-разному: вы не наденете ковбойскую куртку для интервью. Точно так же классы и их действия могут быть сгруппированы согласно их поведению и дизайну. Глядя на общие элементы в их поведении, вы получаете шаблоны проектирования для классов.
Шаблоны проектирования в моем понимании важны только в том случае, если первостепенное значение имеют возможность повторного использования и расширения. Если вы создаете небольшие приложения (скажем, менее 10 классов), они могут вам вообще не понадобиться. Но крупные проекты, особенно те, в которых работают большие команды и которые имеют длительные циклы обслуживания и добавления функций, определенно нуждаются в шаблонах. Это даже не вариант в больших проектах.
Взгляните на некоторые онлайн-учебники по шаблонам. В Википедии есть хороший набор статей. Этот сайт тоже хорош: http://sourcemaking.com/ . Если вы опытный программист, вы обнаружите, что вы столкнулись с несколькими шаблонами, возможно, даже реализовали нечто подобное сами, не зная этого под определенным именем.
Не игнорируйте их вообще! Вы можете найти их полезными в будущем, если не сейчас. Ключом к непредсказуемому подходу к шаблонам проектирования является вопрос: «Что произойдет, если я не буду использовать шаблоны проектирования?» Паттерны не подразумеваются как «лекарства» (хотя вы можете использовать их как лекарство от проблемы); скорее они воплощают изречение «профилактика лучше лечения».
Тем не менее, я бы предостерег от одержимости реализацией шаблонов везде и всегда, когда вы видите небольшой предлог для его использования. Я столкнулся с этой проблемой в одном проекте, где архитектор был убежден, что без DP проект был бы полной катастрофой. У нас было групповое собрание, на котором инженеры перешли к дизайну и отметили, что многие рекомендованные им шаблоны не будут иметь никакого смысла, кроме как показывать «вау взгляд на прекрасные образцы». Потребовалось много убедительных и некоторых переговоров, чтобы сократить количество мест, где шаблоны использовались только для нужд.
источник
Люди, которые ответили, правы в терминах «программирования на основе шаблонов», как обычно думают. У меня есть немного другое определение, которое я считаю более релевантным для того, что я делаю, и я склонен использовать «программирование на основе шаблонов» для описания подхода с использованием плагинов, а не подхода к планированию.
Поскольку я программирую плагины jQuery, облачный плагин CMS и плагины eCommerce, «программирование на основе шаблонов» с этой точки зрения означает изучение основной технологии и существующих вариантов использования, а также попадание в наиболее статистически значимые из них. В частности, плагины должны быть основаны на шаблонах, чтобы они хорошо вписывались в контекст программирования.
Однако лучше всего применять шаблон ПОСЛЕ ТОГО, КАК вы видите действительные варианты использования для нескольких проектов, поэтому он является статистически действительным для повторного использования.
источник