А ты читал GoF? Там было написано, что шаблоны проектирования про проектирование, а не про их реализацию.
На деле, я сомневаюсь, что книжка такого плана существует, так как люди, которым действительно нужны шаблоны, в состоянии самостоятельно понять, как их реализовать на используемом языке с учётом всех особенностей их задачи.
Вообще-то так называемые «шаблоны проектирования» – это штука из Java-мирка, где на определённом этапе возникла задача быстрого втягивания как можно большего количества новых программистов без обучения их всем тонкостям языка. Поэтому оно там прижилось и затем пустило метастазы по всей отрасли. Во всех других сферах оно считается вредной и опасной дрянью. Стремление использовать шаблоны говорит о том, что ты ещё недостаточно хорошо изучил язык и не готов к тому, чтобы проектировать ПО.
Стремление использовать шаблоны говорит о том, что ты ещё недостаточно хорошо изучил язык и не готов к тому, чтобы проектировать ПО.
Шаблоны - это всего-навсего устоявшиеся практики проектирования, обладающие собственным именем и набором характерных свойств; основное их применение - кратко описать своему соседу программисту Васе, что же ты тут такое понаписал.
То, что оно изначально было придумано где-то в академических кругах и было маргинальной ненужной штукой, а потом таки нашло себе применение в Java-мирке, ничего не опровергает.
Стремление использовать шаблоны говорит о том, что ты ещё недостаточно хорошо изучил язык и не готов к тому, чтобы проектировать ПО.
Фанатичное стремление - да, говорит об этом. Но не их знание или использование. Патерны проектирования - это как правило устоявшиеся методы решения определеных задач в архитектуре, которые решают множество проблем. Нужно просто понимать эти патерны (а не тупо заучивать их) и понимать когда они уместны, а когда нет. Но самая частая проблема которую решают патерны - это возможность расширямости и модификации в будущем. И поверь мне, очень часто люди думают «аа, пофиг, ничего меняться не будет», а потом через пару лет рыдают пытаясь разгрести тонны говнокода в то время как использование самых простейших патернов решило бы эти проблемы в зародыше.
Так что нет, я не могу с тобой согласиться полностью. Да, фанатизм и использование патернов без разбору - это показтель не самого выского ума, но знать их, понимать их и использовать когда надо - это необходимость.
Опять же, это устовшиеся практики решения задач. При чем тут выразительность языка?
Потому что есть принцип do not repeat yourself. В идеале, все эти устоявшиеся практики можно было бы вынести в библиотеки и использовать уже их, а не заниматься зубрёжкой и копипастой.
Мой поинт как раз в том, что есть бест практисы, обмен опытом, идиоматический подход, но универсального набора абстракций для всех языков сразу (даже только ООП) никогда не будет, а попытки перенести что-то в готовом виде из смолтока в современный C++ ожидаемо терпят фиаско.
В этом месте я попрошу сторонников паттернов привести примеры проектов, документированных в терминах шаблонного подхода.
Ты определись, тебе сувать паттерны в библиотеку или это over-engineering.
В данном конкретном случае это и то и другое сразу. Кстати, подобных вещей (Abstract Singleton Proxy Factory) для других языков я не припомню, т.е. это исключительно болезнь Java.
Я думал, в меня сейчас томиком Александреску запустят, которого я читал (а ты нет) давным давно и готов обсуждать. По твоей ссылке как раз эта опасная ересь представлена в наихудшем виде.
когда люди думаю что всё может назавтра поменяться, то не через пару лет, а ежедневно нудно разгребать тонны говнокода, в то время как написанное под конкретные условия просто читается и просто работает.
один был такой мудрец. хотел написать все паттерны. В гуманитарной голове не родилась мысль, что не все паттерны можно вынести в библиотеку. Зато учил он писать код наивную молодёжь дай боже. На пользу молодёжи это явно не пошло.
По определению, паттерны не придумывают, а скорее «открывают». Это не какие-то супер-оригинальные решения, а наоборот — часто встречающиеся, типовые решения одной и той же проблемы.
Концепцию паттернов впервые описал Кристофер Александер в книге «Язык шаблонов. Города. Здания. Строительство». В книге описан «язык» для проектирования окружающей среды, единицы которого — шаблоны, — отвечают на архитектурные вопросы: какой высоты сделать окна, сколько этажей должно быть в здании, какую площадь в микрорайоне отвести под деревья и газоны.
Идея показалась заманчивой четвёрке авторов Эрих Гамма, Ричард Хелм, Ральф Джонсон, Джон Влиссидес, которую принято называть «бандой четырёх» (Gang of Four). В 1995 году они написали книгу «Design Patterns: Elements of Reusable Object-Oriented Software», в которой применили концепцию типовых паттернов в программировании. В книгу вошли 23 паттерна, решающие различные проблемы объектно-ориентированного дизайна.