it-swarm-pt.tech

Como você sabe quando usar padrões de design?

Qualquer pessoa pode ler o livro do GoF para aprender o que são padrões de design e como usá-los, mas qual é o processo para descobrir quando um padrão de design resolve um problema? O conhecimento do padrão orienta o design ou existe uma maneira de descobrir como um padrão pode ser usado para alterar um design?

Em outras palavras, existem padrões para padrões?

63
Robert S.

Padrões de design devem fornecer uma estrutura na qual problemas podem ser resolvidos. Ao resolver um problema real, você deve considerar muitas pequenas variações de uma solução para esse problema para ver se alguma se encaixa em um padrão de design. Em particular, você provavelmente precisará generalizar seu problema, ou sua solução, para ajustar um padrão de design.

A resposta é: é uma arte. Conhecendo os padrões de design são certamente um passo importante. Uma maneira de se acostumar com esse tipo de coisa é estudar aplicativos dos padrões de design, não apenas os padrões. Ver muitos aplicativos diferentes de um padrão pode ajudá-lo ao longo do tempo a melhorar o mapeamento de uma tarefa em um padrão.

37
EfForEffort

Eu recomendo a leitura Head First Design Patterns da O'Reilly. Isso explica como esses padrões podem ser usados ​​no mundo real.

Head First Design Patterns

Eu também acrescentaria que não tente criar muito com os padrões em mente. Além disso, procure por "odores de código" que um padrão pode ajudar a resolver.

39
BigJump

Existe um conceito básico subjacente aos padrões que a maioria das pessoas não gosta. Não pense neles como estruturas de dados ou algoritmos.

Em vez disso, pense no seu código como pessoas enviando mensagens, como passando notas ou enviando cartas, entre si. Cada objeto é uma 'pessoa'.

A maneira como você organiza as 'pessoas' e os padrões que eles usam para enviar mensagens uns aos outros são os padrões.

12
kyoryu

Inverta a questão: o padrão que você deve fazer é "qual padrão se encaixa no meu problema". Considere um padrão realmente simples, localizando um elemento em uma matriz. em C, é algo como

TYPE_t ary[SIZE] = // ... gets initialized somehow
size_t ix ;        // Your index variable

for(ix=0; ix < SIZE; ix++){
    if (ary[ix] == item) {
       return ix ;
    }
}

Você não olha o código e pensa "onde posso usá-lo", olha o problema e diz "sei como encontrar um elemento em uma matriz?"

Com padrões mais extensos, realmente funciona da mesma maneira. Você precisa ter muitas cópias de uma estrutura de dados que não muda frequentemente - isso faz você pensar em "Flyweight". Você quer algo que viva nos dois lados de um limite de rede, você acha que é Proxy.

Quando você estuda padrões, especialmente o GoF, pergunte a si mesmo "que situações exigem esse padrão? Eu já vi esse padrão antes? Para o que eu poderia ter usado isso em trabalhos anteriores? Onde posso encontrar um exemplo disso em minha própria vida?" "

11
Charlie Martin

Padrões de design? Você está de molho neles!

Não há nada de especial nos padrões de design, eles são apenas padrões de design. Todo desenvolvimento usa padrões de design. Há um certo conjunto de padrões de design na programação orientada a objetos que são considerados geralmente desejáveis ​​e se tornaram os Padrões de Design canônicos. Mas também existem muitos padrões de design indesejáveis ​​ou indiferentes (como antipadrões de design ), bem como padrões não descobertos e/ou não documentados.

Você não pode evitar o uso de padrões durante a programação. Mas você pode se tornar mais consciente dos padrões que está usando e de quando certos padrões são úteis e quando não são. Estudar os Padrões de Projeto canônicos do livro do GoF ajudará, assim como aprenderá sobre odores e refatoração de código . Não existe uma resposta certa para quando um determinado design ou padrão de design deve ser usado; você precisa criar experiência no uso e na implementação para saber quando e onde usar o padrão.

7
Wedge

Experiência. Aprenda os padrões e exemplos reais de seus usos. Toda vez que você tiver que tomar uma decisão de design, pense se um padrão que você conhece se aplicaria a ele. Com o tempo, você melhora e descobre novas maneiras de aplicar os padrões a uma ampla gama de problemas.

6
David Thibault

Outro ótimo livro que encontrei foi:

Refatorando para padrões

Ao mostrar quando, onde e como você pode alterar o código existente para os padrões, isso me proporcionou uma compreensão muito melhor dos conceitos e uma capacidade de identificar onde eles podem ser usados.

4
mwjackson

Rian van der Merwe escreveu um excelente artigo sobre isso para a Smashing Magazine em junho de 2012. Aqui estão alguns pontos importantes.

Os padrões de design são úteis por dois motivos:

  1. Os padrões economizam tempo porque não precisamos resolver um problema que já foi resolvido.
  2. Os padrões tornam a Web mais fácil de usar porque, à medida que a adoção aumenta entre os designers, os usuários se acostumam com o modo como as coisas funcionam, o que, por sua vez, reduz sua carga cognitiva ao encontrar elementos comuns de design.

van der Merwe recomenda que consideremos quebrar padrões quando:

  1. A nova maneira empiricamente melhora a usabilidade, ou
  2. A maneira estabelecida fica desatualizada.
4
John Horstman

Se você conhece os padrões, eles se tornam ferramentas na sua caixa de ferramentas. Quando você olha para uma tarefa, você seleciona em suas ferramentas. Nesse ponto, você deve ter uma boa idéia de qual ferramenta é a mais adequada para um determinado problema. É aqui que as fórmulas param de funcionar e você realmente faz o trabalho de engenharia.

3
Bill K

Como você aprendeu quando usar uma declaração if?

Eu comparo isso a isso porque é uma construção maior da qual você precisa conhecer os meandros antes de poder usá-la efetivamente. Uma instrução if resolve uma classe de problemas que precisam ser ramificados. Um padrão de ponte resolve uma classe de problemas. Eu realmente não os vejo de maneira diferente.

3
Jason Punyon

Concordo que apenas aprender os padrões não é suficiente. O problema com a maioria dos livros é que eles não fornecem exemplos do mundo real. Ouvi dizer que o Head First Design Patterns, como alguns sugeriram anteriormente, é bom.

Outra coisa é que a maioria dos livros intencionalmente não é específica do idioma , o que pode ser uma coisa boa ou ruim para você. Por mais importante que seja entender um padrão em geral, é igualmente importante saber como implementá-lo bem . Encontrei um livro chamado C # 3.0 Design Patterns , que dedica tinta quase igual a esses dois aspectos inseparáveis.

2
petr k.

O conceito de um padrão de projeto foi retirado da engenharia estrutural, como ocorre com muitas práticas em engenharia de software. Se você considerar a construção de uma estrutura, há decisões que precisam ser tomadas sobre como construir essa estrutura para atingir as metas estabelecidas. Ao tomar essas decisões, você terá um conjunto de requisitos para trabalhar. Pode ser algo tão simples quanto o Bridge deve suportar X toneladas de uma vez ou ter uma resistência à tração específica para permitir movimento suficiente no vento, etc. Um arquiteto usaria o conhecimento prévio de outras construções para fazer essas escolhas de design. É muito improvável que ele/ela tente resolver o problema do zero.

Os padrões de engenharia e design de software são exatamente os mesmos. São simplesmente soluções comuns para problemas comuns. Se você conhece os padrões de design, quando estiver trabalhando em um design, e parte específica de um sistema exigir algo que se encaixe no padrão de design que você possui, use-o. Não tente ajustar um sistema em volta de um padrão de design, ajuste-os ao seu sistema (onde eles se encaixam). Apenas tente pensar nelas como um conjunto de soluções para reduzir a quantidade de trabalho de design que você precisa fazer e tenha cuidado ao projetar demais suas soluções para incluir o maior número possível de padrões de design. Isso servirá apenas para tornar sua solução insustentável e provavelmente bastante complicada.

2
Codemwnci

Eu tive essa mesma pergunta quando encontrei padrões de design. Apreciei os conceitos, mas não sabia quando ou como aplicá-los. Minha abordagem inicial foi procurar aplicabilidade durante a fase de design. Depois de ter um diagrama de blocos e responsabilidades semi-claras para cada bloco, não é muito difícil assumir as responsabilidades e cruzá-las com um livro de referência decente. Vários bons foram mencionados aqui, mas o do GoF deve estar na sua lista. O próximo passo é procurar melhorias no design com base no que você vê nos padrões.

2
AdamC

Um padrão de design é uma descrição genérica sobre como resolver uma problema comum . Há duas coisas que devemos prestar atenção:

Primeiro, é uma descrição genérica de ; não é a solução concreta e também não é uma receita completa; é apenas uma descrição de como seria a solução para abordar um problema comum.

Segundo, o problema é que a questão é um problema comum : , isso significa que esse problema foi encontrado muitas vezes antes e depois Com o tempo, as pessoas desenvolveram uma descrição de como uma solução ideal pode ser aplicada a esse problema comumente repetido.

Portanto, se você encontrar um novo problema que não é comum, tente não usar padrões de design para resolvê-lo ou, pelo menos, não faça dos padrões de design sua ferramenta para resolver qualquer tipo de problema que você enfrentar.

0
Mohammed Al Banna