Я уже некоторое время изучаю Clojure, хотя я не использовал его ни в каких нетривиальных проектах. По сути, я только освоился с синтаксисом и некоторыми идиомами. Исходя из опыта ООП, поскольку Clojure является первым функциональным языком, который я очень внимательно изучил, я, естественно, не настолько доволен функциональным способом выполнения задач.
Тем не менее, существуют ли какие-либо конкретные рабочие процессы или шаблоны проектирования, общие для создания больших функциональных приложений? Мне бы очень хотелось начать использовать функциональное программирование «по-настоящему», но я боюсь, что из-за недостатка опыта это приведет к грандиозному провалу.
«Банда четырех» - это такой стандарт для ОО-программистов, но есть ли что-то подобное, более ориентированное на функциональную парадигму? У большинства ресурсов, которые я нашел, есть отличные слепки программирования, но они не отступают, чтобы дать более широкий, более архитектурный вид.
Ответы:
Подобные паттерны обычно являются признаками сломанной, непригодной базовой модели.
ООП нарушен по дизайну, непригоден для большинства своих приложений, поэтому он взрывается всеми так называемыми «шаблонами». Функциональная модель (чуть чуть) более гибкая, и потребность в «шаблонах» там не так очевидна.
Как только вы начнете применять (естественно для функциональных программистов) языковой подход, используя или создавая DSL для каждой конкретной проблемной области, вы обнаружите, что шаблоны вообще не отображаются, потому что вы всегда используете подходящую модель для описание проблемы.
Конечно, некоторые повторяющиеся «шаблоны» или «рецепты» высокого уровня неизбежны даже в очень абстрактной, чистой и чистой математике, но они имеют другой вид и другой уровень абстракции, чем шаблоны GoF. Вы найдете монады полезными, например.
источник
По моему личному мнению, шаблоны дизайна семантические. Я помню, как переписывал некоторые из моих старых приложений, используя MVC, просто чтобы убедиться, что я понял шаблон так же хорошо, как и думал. Но, в конце концов, я ничего не получил от MVC по сравнению с моим исходным кодом.
Однако, если бы я применил свой исходный код к более широкой среде разработки и сказал кому-то, что есть проблема с этим определенным методом ... для этого разработчика было бы трудно отследить проблему. ОДНАКО, если бы я сказал, что Контрактный Контроллер был испорчен по какой-то причине, он (а) точно знал бы, с чего начать.
Шаблоны дизайна великолепны ... но, как я уже сказал, я думаю, что они семантические!
РЕДАКТИРОВАТЬ: Вы типа евангелиста взломать меня. Как что-либо могло быть разработано без MVC (или какого-либо другого шаблона проектирования)!
источник