O que é programação baseada em padrões?

16

Alguém pode explicar a obsessão por padrões e antipadrões na programação? Eu pergunto porque não tenho absolutamente nenhuma idéia do que qualquer um dos padrões significa. Quando confrontado com uma tarefa de programação, penso um pouco sobre o problema, anote algumas estruturas de dados que julgue relevantes, protótipo de uma solução, separe alguns módulos e itere. Em nenhum lugar do processo eu penso "Oh, eu preciso do padrão FunkyLookyTastic aqui".

davidk01
fonte
12
Obsessão com padrões é, de uma forma um anti-padrão
Anto
1
No último ponto, concordo parcialmente. Existem alguns padrões que vou citar, mas alguns padrões de livros didáticos parecem pequenas variantes um do outro, e a parte interessante é geralmente como você adapta o padrão para se adequar ao caso específico de qualquer maneira, então você certamente não deve ser dogmático sobre as coisas.
Steve314
1
Você está programando em uma linguagem dinâmica? Muitos dos padrões aos quais as pessoas se referem são maneiras de contornar as limitações em Java.
johncip
Além disso, tratar cada problema separadamente não se ajusta ao tamanho da equipe. Por exemplo, com uma estrutura MVC, os modelos geralmente são normalizados, mas as visualizações podem lidar com dados derivados. Existem algumas maneiras de lidar com isso, mas as pessoas não devem resolver esse problema (potencialmente diferente) toda vez que ele for encontrado. E outras pessoas que leem o código não devem ter que descobrir como o problema X foi resolvido nesse caso, em oposição a todos os outros.
johncip

Respostas:

19

Um padrão é uma abordagem comum para resolver um tipo comum de problema; nada mais e nada menos. Ao conhecê-los e compreendê-los, você pode usar as experiências de outras pessoas para guiá-lo em direção ao tipo de solução que demonstrou funcionar bem, evitar armadilhas que foram encontradas no passado e discutir a solução usando terminologia familiar a outras pessoas que conheça esse padrão.

Obviamente, você pode encontrar uma boa solução sem usar explicitamente um padrão, e igualmente bem com uma solução ruim tentando aplicar um padrão que não se encaixa realmente no seu problema específico. Eu acho que a "obsessão" que você observa geralmente vem de pessoas que acabaram de descobrir o conceito, e acho que ele é bem mais poderoso do que realmente é. A maioria das pessoas os reconhece rapidamente pelo que são: uma ferramenta útil, não uma bala mágica.

Os antipadrões, por outro lado, são comportamentos geralmente observados que tendem a reduzir a qualidade do código. Novamente, é útil conhecer e entender algumas delas para evitar esse comportamento e tentar corrigi-lo (com argumentos fundamentados) quando você o observar em outras pessoas. Alguns descreveriam o uso excessivo de padrões como um antipadrão.

Mike Seymour
fonte
1
Por exemplo, os famosos padrões orientados a objetos de grupo de quatro pessoas foram compilados a partir da experiência dos autores e das pessoas com quem eles estavam em contato. A razão pela qual alguns padrões têm vários nomes - eles foram reinventados independentemente e nomeados várias vezes. A maioria dos programadores reinventa naturalmente alguns padrões deixados para seus próprios dispositivos - e alguns antipadrões, é claro.
Steve314
3
a "obsessão" que você observa geralmente vem de pessoas que acabaram de descobrir o conceito - principalmente verdade, IMHO. acredito que existem aqueles que acham que você deve abordar um problema com padrões prontos ... e se a sua solução não incluir padrões óbvios, então a solução está errada ... devemos dedicar um tempo para aprender os padrões, como eles 're usado, e quando e quando não usá-los - eles fazem parte da nossa caixa de ferramentas
iAbstract
9

Os padrões são o conhecimento destilado dos programadores em um livro de receitas e uma maneira útil de os programadores se comunicarem.

Como outras respostas sugerem, os padrões são realmente soluções comuns para problemas comuns. O benefício é que geralmente você pode obter melhores soluções usando um padrão existente ou descobrir armadilhas prováveis ​​antes de começar a codificar.

O outro benefício é quando você está conversando com alguém sobre seu código. Os padrões são outro tipo de jargão que condensam longas descrições em poucas palavras. Tente explicar "então temos um observador adicionado pela fábrica" ​​sem se referir a padrões. Você pode fazer isso, mas leva muito tempo.


fonte
2
+1 para comunicação. A rotina do dia a dia fica muito mais suave quando todos estão na mesma página e têm um léxico comum.
Ampt
3

A maioria dos desenvolvedores se encanta com qualquer novo paradigma ou metodologia que surgir. Eu o fiz quando ouvi pela primeira vez sobre padrões de design. Padrões de design são exatamente o que o nome sugere: um design ou modelo para criar classes e modelar seu comportamento e interação de maneira previsível

Dê uma olhada nas casas. Eles têm algumas semelhanças. Cada casa tem uma sala de estar, cozinha, quarto, banheiro, lavabo, no mínimo. Ninguém vai construir uma casa sem banheiro, certo? Os apartamentos têm um padrão diferente dos bunglows. Castelos têm um padrão completamente diferente. Roupas também têm padrões. Um paletó e uma camisa formal têm o mesmo design básico, mas têm comportamentos diferentes: você não usará paletó de cowboy para uma entrevista. Da mesma forma, as classes e suas ações podem ser agrupadas de acordo com seu comportamento e design. Observar os elementos comuns em seus comportamentos fornece padrões de design para as classes.

Os padrões de design, no meu entendimento, são importantes apenas se a reutilização e a expansibilidade forem as principais preocupações. Se você criar aplicativos pequenos (por exemplo, menos de 10 classes), talvez não precise deles. Porém, grandes projetos, especialmente aqueles com equipes grandes trabalhando neles e com longos ciclos de manutenção e adição de recursos, definitivamente precisarão de padrões. Nem sequer é uma opção em grandes projetos.

Dê uma olhada em alguns tutoriais online sobre padrões. A Wikipedia tem um bom conjunto de artigos. Este site também é bom: http://sourcemaking.com/ . Se você é um programador experiente, verá que encontrou alguns padrões, talvez até mesmo tenha implementado algo semelhante sem conhecê-lo com um nome específico.

Não os ignore por completo! Você pode encontrá-los úteis no futuro, se não agora. A chave para abordar padrões de design com uma mente aberta é perguntar: "O que acontecerá se eu não usar padrões de design?" Padrões não são considerados "curas" (embora você possa usá-los como uma cura para um problema); ao contrário, eles incorporam o ditado "é melhor prevenir do que remediar".

Mesmo assim, eu alertaria contra uma obsessão com a implementação de padrões onde e quando você vir um pequeno pretexto para usá-lo. Eu enfrentei esse problema em um projeto em que o arquiteto estava convencido de que, sem o DP, o projeto seria um desastre completo. Tivemos uma reunião de grupo em que os engenheiros mudaram o design e apontaram que muitos padrões que ele recomendava não teriam utilidade além de mostrar "uau, olhe para os belos padrões". Foi preciso muita negociação e algumas negociações para reduzir o número de lugares em que os padrões eram usados ​​apenas com base nas necessidades.

DPD
fonte
1

As pessoas que responderam estão corretas em termos de "programação baseada em padrões", como normalmente se pensa. Eu tenho uma definição um pouco diferente que acho mais relevante para o que estou fazendo e costumo usar "programação baseada em padrões" para descrever uma abordagem de plug-in em vez de uma abordagem de planejamento.

Como eu programo os plugins jQuery, um plug-in de nuvem CMS e plug-ins de comércio eletrônico, "programação baseada em padrões" dessa perspectiva significa examinar a tecnologia principal e quais casos de uso existem e atingir os mais relevantes estatisticamente. Os plugins, em particular, precisam ser muito baseados em padrões, para que se ajustem bem ao contexto de programação.

No entanto, é melhor aplicar um padrão DEPOIS de ver casos de uso válidos em vários projetos, para que seja estatisticamente válido para reutilização.

Jason
fonte