Existem fluxos de trabalho ou padrões de design específicos que são comumente usados ​​para criar grandes aplicativos de programação funcional? [fechadas]

13

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.

Andrew
fonte
6
Alguns dos padrões GOF são realmente apenas soluções alternativas em linguagens OO para coisas que a Programação Funcional já fornece. Veja stackoverflow.com/q/327955
Robert Harvey
2
relacionado: stackoverflow.com/q/89212
rebocadores
Eu acho que há um pouco de foco nos padrões específicos do GoF / OOP nesta discussão. Alguém pode postar alguns padrões específicos específicos de programação funcional (que não tentam apenas provar a trivialidade do GoF em linguagens funcionais)?
Daniel B

Respostas:

3

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.

SK-logic
fonte
+1 nos últimos 2 parágrafos, acho que está no local. Com relação ao POO, estou curioso para saber o motivo por trás de chamá-lo quebrado, além do fato de ser uma ferramenta genérica frequentemente aplicada a problemas específicos (portanto, padrões de baixo nível, como os do GoF, passam a existir). Você pode elaborar resumidamente ou postar um link resumindo sua opinião?
Daniel B
@ DanielB, não há nada errado com o OOP em si, mas o modo como é geralmente aplicado está totalmente quebrado. Esse modelo se encaixa apenas em alguns dos problemas do mundo real (e realmente brilha lá, quando aplicado adequadamente), mas, no restante, ele precisa de todas as muletas e fita adesiva para encaixar. Veja minha resposta em programmers.stackexchange.com/questions/52608/… por exemplo.
SK-logic
OK, acho que estou na mesma página. Na verdade, posso ter feito essa pergunta exata uma vez antes, desculpe por isso - a maneira como você formulou essa linha parece que está implicando mais.
Daniel B
-3

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)!

aserwin
fonte
2
semântico (sɪˈmæntɪk) - adj. 1. ou relacionado ao significado ou decorrente de distinções entre os significados de diferentes palavras ou símbolos 2. ou relacionado à semântica (estudo do significado) 3. lógica relacionada à interpretação de uma teoria formal, como quando tabelas de verdade são dadas como um relato dos conectivos sentenciais
Robert Harvey
+1 - o que quero dizer é que os padrões de design são simplesmente um meio de comunicação!
Aserwin 11/11/12
Os padrões de design são mais do que apenas uma maneira de se comunicar; são receitas concretas e bem compreendidas que podem ser implementadas em software para resolver certos problemas comumente encontrados.
Robert Harvey
É o que dizem os livros. Mas nunca resolvi um problema através de um padrão de design que não poderia resolver sem ele. A única vantagem que notei em minha própria experiência é a capacidade de falar um com o outro sobre o código! ;)
aserwin
1
Em relação à sua edição: você prefere reinventar a roda toda vez que escreve um novo código?
Robert Harvey