Estou explorando o Clojure há algum tempo, embora não o tenha usado em nenhum projeto não trivial. Basicamente, acabei de me sentir confortável com a sintaxe e com alguns dos idiomas. Vindo de um histórico de POO, com Clojure sendo a primeira linguagem funcional em que me apaixonei, naturalmente não me sinto tão à vontade com a maneira funcional de fazer as coisas.
Dito isto, existem fluxos de trabalho específicos ou padrões de design comuns à criação de grandes aplicativos funcionais? Eu realmente gostaria de começar a usar a programação funcional "de verdade", mas tenho medo de que, com minha atual falta de conhecimento, isso resulte em uma falha épica.
O "Gangue dos Quatro" é um padrão para programadores de OO, mas há algo semelhante que seja mais direcionado ao paradigma funcional? A maioria dos recursos que encontrei possui ótimos nuggets de programação, mas eles não recuam para dar uma aparência mais ampla e arquitetônica.
Respostas:
Padrões desse tipo geralmente são sintomas de um modelo subjacente quebrado e inapto.
OOP é quebrado pelo design, impróprio para a maioria de suas aplicações, portanto, explode com todos os chamados "padrões". O modelo funcional é (um pouco) mais flexível, e a necessidade de "padrões" não é tão óbvia lá.
Depois de começar a aplicar uma abordagem orientada à linguagem (natural para os programadores funcionais), usando ou criando DSLs para cada domínio de problema específico, você verá que nenhum padrão está aparecendo, porque você está sempre empregando um modelo adequado para descrevendo um problema.
É claro que alguns "padrões" ou "receitas" recorrentes de alto nível são inevitáveis, mesmo na matemática muito abstrata, limpa e pura, mas são de um tipo diferente e de um nível de abstração diferente dos padrões do GoF. Você encontrará mônadas úteis, por exemplo.
fonte
Na minha opinião pessoal, os padrões de design são semânticos. Lembro-me de reescrever alguns dos meus aplicativos antigos usando o MVC apenas para garantir que eu entendesse o padrão tão bem quanto pensava. Mas, no final, não ganhei nada do MVC sobre o meu código original.
No entanto, se eu aplicasse meu código original a um ambiente de desenvolvimento maior e dissesse a alguém que há um problema com esse método específico ... seria difícil para o desenvolvedor rastrear o problema. NO ENTANTO, se eu dissesse que o ContractController estava estragado por algum motivo, ele saberia exatamente por onde começar.
Os padrões de design são ótimos ... mas como eu disse, acho que são semânticos!
EDIT: Vocês evangelistas me fazem rir. Como alguma coisa foi desenvolvida sem o MVC (ou algum outro padrão de design)!
fonte