Чтобы добавить еще одну метафору в суп, шаблонами проектирования являются Clippy - помощник Microsoft Office. «Похоже, вы делаете то же самое с целой кучей вещей. Могу я помочь вам с этим, предложив вам Iterator или Visitor?»
Хорошая запись этих шаблонов покажет, когда полезно сделать что-то так же, как это делалось много раз раньше, какие ошибки вы совершите в первый раз, и какие были найдены общие способы избежать этих ошибок. , Итак, вы читаете шаблон проектирования (или просматриваете его по памяти), а затем вы приступаете к своей работе. То, что вы не можете сделать, это получить только с помощью Clippy и мастеров.
Где неопытные люди могут пойти не так и написать код, который не учитывает реальность, - это когда они думают, что их список шаблонов проектирования представляет собой полный список всех возможных подходов к решению проблем в программном обеспечении, и пытаются проектировать код, связывая воедино дизайн образцы, пока это не закончено. Еще одна плохая тактика, наблюдаемая в дикой природе, заключается в том, чтобы использовать шаблон дизайна в ситуации, для которой он не очень подходит, исходя из того, что шаблон дизайна "является наилучшей практикой". Нет, это может или не может быть лучшей практикой для класса проблем, которые он фактически решает , но это определенно не лучшая практика для проблем, которые он не может решить, или для проблем, которые он решает только путем введения ненужной сложности, когда есть более простое решение. ,
Конечно, кто-то также может избежать паттерна, основанного на YAGNI, а затем понять, что он ему нужен, и попытаться найти нормальное решение. Это обычно (но не всегда) хуже, чем реализация требования с самого начала, и поэтому даже в гибкой разработке разочаровывает, когда полностью предсказуемые требования не обнаруживаются на ранней стадии. Я не мог быть единственным программистом на C ++, который был сильно удивлен тем, что Java изначально отвергала универсальные контейнеры как ненужно сложные, а затем снова включила их.
Поэтому почти наверняка было бы ошибкой избегать написания Итератора в принципе, потому что вы предпочитаете избегать шаблонов проектирования.
Добавление нового поля в слой UI / database / Data занимает 2-3 часа, а в его коде - 30 минут.
С этим не поспоришь: по этой метрике его дизайн намного лучше, чем у другого. Хотя это потому , что он избегал шаблонов проектирования, сомнительно, я думаю, что это более вероятно, потому что он учитывал правильные "реальные" проблемы при проектировании, и с помощью опыта лучше справляется со своей работой, чем кто-то, вооруженный только учебником и высокие идеалы.
Поэтому он признал, что любой шаблон, который требует от вас прикосновения к множеству различных точек в коде, чтобы добавить поле, является плохим шаблоном для работы, «облегчать добавление полей», и он не использовал эти шаблоны. Многоуровневые архитектуры действительно могут пострадать в этом отношении, и неправильно использовать шаблоны проектирования, не осознавая их недостатков.
В отличие от этого, сколько времени нужно, чтобы написать новый пользовательский интерфейс в своем дизайне, и сколько времени это занимает в многоуровневой архитектуре? Если бы проект требовал от него постоянно создавать и развертывать новые пользовательские интерфейсы поверх фиксированной модели данных, вместо того, чтобы постоянно добавлять поля, мы надеемся, что он разработал бы это вместо этого. Или так же. Но, несмотря на все свои преимущества, говорить «мы делаем гибкие», к сожалению, не означает, что вам никогда не придется делать еще один компромисс!
Выбор из меню шаблонов дизайна, безусловно, может помешать вам думать о самых важных проблемах. Но распознавание того, когда вы пишете «Посетитель», и документирование или присвоение ему названия «Посетитель», чтобы помочь читателям быстро получить его, ничего не мешает. Писать «это посетитель» вместо правильного документирования - ужасная ошибка по той причине, которую дает ваш старший разработчик - программисты этого не поймут. Даже программистам, которые знают, что такое посетитель, нужно больше информации, чем просто «это посетитель».