Eu vi, aqui nos programadores, a resposta para essa pergunta: como o pensamento sobre padrões de design e práticas de OOP muda em linguagens dinâmicas e de tipo fraco? Lá encontrei um link para um artigo com um título franco: Os padrões de design estão faltando recursos de linguagem . Mas onde encontrei trechos que para mim pareciam muito cativantes e que provavelmente podem ser verificados com base na experiência, pois há um incentivo para isso, como:
PaulGraham disse que "Peter Norvig descobriu que 16 dos 23 padrões no Design Patterns eram 'invisíveis ou mais simples' no Lisp".
ou outra frase que confirme o que vi recentemente com pessoas tentando simular aulas em JavaScript:
Obviamente, ninguém nunca fala do padrão de "função", ou padrão de "classe", ou de várias outras coisas que consideramos um dado adquirido, porque a maioria dos idiomas os fornece como recursos internos. OTOH, programadores em uma linguagem puramente PrototypeOriented? pode ser conveniente simular classes com protótipos ...
Também estou levando em consideração que os padrões de design são uma ferramenta de comunicação . Porque mesmo com minha experiência limitada participando da criação de aplicativos, posso ver como um antipadrão ( ineficaz e / ou contraproducente ), por exemplo, forçando uma pequena equipe PHP a aprender padrões GoF para aplicativos de intranet de pequeno a médio porte. Estou ciente de que escala, escopo e propósito podem determinar o que é eficaz e / ou produtivo, mas ainda não consegui encontrar uma visão geral técnica sobre isso.
Vi pequenas aplicações comerciais que combinavam funcionalidade com OOP e ainda eram mantidas, e não sei se muitos precisariam, por exemplo, em python para escrever um singleton, mas para mim um módulo simples faz a mesma coisa.
Portanto, existem estudos, artigos exaustivos ou outra forma de exposição que leva em consideração padrões de design versus soluções alternativas e maneiras mais simples de fazer isso, ou substituições por recursos de linguagem?
fonte
Respostas:
Não conheço nenhuma discussão ou estudo aprofundado que leve em conta todas essas coisas.
Dito isto, todo o argumento de "padrões de design está apenas corrigindo recursos ausentes nas linguagens OO" é um pouco tênue, na minha opinião. Sim, alguns padrões de design são exatamente isso, eles preenchem uma lacuna comum que nem existe em alguma outra linguagem X. Esses são tipicamente seus padrões de design mais simples e de baixo nível, como alguns / muitos dos originais do livro GoF.
Mas os padrões de design vão muito além daqueles simples, e chamá-los de recursos de linguagem ausentes amplia a imaginação. Dê uma olhada no catálogo de padrões de aplicativos corporativos de Fowler e pense em como seria se todos fizessem parte da definição principal de uma linguagem. Eu acho que você acabaria com uma linguagem específica de domínio ( DSL ) para aplicativos corporativos (e muito complexa).
Então é isso mesmo: os padrões de design são uma maneira de apresentar soluções reutilizáveis para problemas específicos (que geralmente são aplicados em uma linguagem genérica para todos os fins). É aqui que a comunicação também entra. Se você me disser "usamos o Active Records", já sei bastante sobre seu aplicativo, sem gastar minutos discutindo quais são as várias abordagens. Então, sim, os padrões de design corrigem falhas na especificação da linguagem. Isso é tudo o que eles fazem? Não - não por um longo tiro.
Editar:
De certa forma, o que estou dizendo é que os padrões permitem que os profissionais de OO pensem em um nível superior e quase construam um tipo de DSL para seu ambiente, mantendo-se dentro da sintaxe de sua linguagem. E sim, eu vi o que acontece quando você os aplica em qualquer lugar (consulte: AbstractSingletonProxyFactoryBean , sim, ele existe) ou acha que eles são algum tipo de bala de prata. O ponto é que, embora demorem muito tempo para se sentirem realmente confortáveis, eles devem realmente diminuir a complexidade, tornando as coisas previsíveis / compreensíveis em alto nível. Isso é muito diferente de ser um kit de correção para as falhas do seu idioma.
Edição 2 - adicionado o contra-exemplo AbstractSingletonProxyFactoryBean para zombar dos padrões. Para ser completamente justo, quando visto sob uma luz de AOP, mesmo esse contra-exemplo é defensável.
fonte