Como estudar padrões de design? [fechadas]

352

Li cerca de 4 a 5 livros sobre padrões de design, mas ainda não sinto que cheguei mais perto do nível intermediário nos padrões de design?

Como devo estudar os padrões de design?

Existe algum bom livro para padrões de design?

Eu sei que isso virá apenas com experiência, mas deve haver alguma maneira de dominá-las?

anand
fonte
6
A melhor maneira de aprender o padrão de design é fazendo um projeto. Quando você ver padrões no projeto você vai saber quando usá-los aqui é um artigo que ensina passo padrão de design a passo com um projeto codeproject.com/Articles/1009532/...
Shivprasad Koirala
11
Dê uma olhada nos Antipatterns também deviq.com/antipatterns
Desenvolvedor
Você pode aprender aqui, play.google.com/store/apps/…
Keyur Thumar 13/17
Provavelmente atrasado, mas ainda assim pode ajudar alguém. Tente geeksforgeeks.org/software-design-patterns para entender os conceitos básicos e os cenários explicados onde eles podem ser usados. Me ajudou a entender o fundamento ea finalidade de cada padrão
zeetit
Veja também, Pluralsight
ssmith

Respostas:

206

A melhor maneira é começar a codificar com eles. Os padrões de design são um ótimo conceito que é difícil de aplicar apenas lendo sobre eles. Pegue algumas implementações de exemplo encontradas on-line e crie em torno delas.

Um ótimo recurso é a página Data & Object Factory . Eles examinam os padrões e fornecem exemplos conceituais e do mundo real. O material de referência também é ótimo.

Joseph Ferris
fonte
11
Exatamente! Eu sempre diverti que o software se enquadra na "Ciência da Computação". Eu posso ver o argumento do hardware, mas o software contribui para uma ciência muito inexata!
31878 Joseph Ferris
Infelizmente este recurso não está mais disponível :(.
5
@NielsW Acabou, talvez tenha sido apenas temporariamente fora do ar.
Uthomas
211

Li três livros e ainda não entendi muito bem os padrões até ler Head First Design Patterns da OReilly. Este livro abriu meus olhos e realmente explicou bem.

texto alternativo

Darren C
fonte
14
É um pouco estranho no começo ler um livro "sério" que se parece com isso, mas enquanto eu continuava lendo, notei que estava realmente entendendo conceitos para uma mudança. Definitivamente vale a pena ler.
Tim Whitcomb
18
Definitivamente, acho que este é o melhor livro para aprender sobre padrões de design. O livro do GoF deve ser usado como referência, depois que você os entender melhor.
Bill o Lagarto
você mencionou que leu 3 livros .. você leu este também? amazon.com/… se sim, o que você achou?
Sivabudh
11
Eu conheci Erich Gamma (um dos GoF) em uma conferência em Nantes, França, em 2006, e ele disse que este livro foi superando o livro GoF :)
Fuhrmanator
11
Depois de ler este livro, OO fez sentido. @SimpleFellow O livro do GoF é monótono. Sem conhecimento prévio sobre os padrões de design, você dorme rapidamente. No entanto, é uma boa ( a ) livro de referência e deve ser parte de qualquer biblioteca de profissionais juntamente com DDD e P da EAA.
mbx 21/07
93

Meus dois centavos para tal e velha pergunta

Algumas pessoas já mencionaram, praticam e refatoram. Acredito que a ordem certa para aprender sobre padrões é esta:

  1. Learn Test Driven Development (TDD)
  2. Aprender refatoração
  3. Aprenda padrões

A maioria das pessoas ignora 1, muitas acreditam que podem fazer 2 e quase todo mundo vai direto para 3.

Para mim, a chave para melhorar minhas habilidades de software foi aprender TDD. Pode levar um longo tempo de codificação lenta e dolorosa, mas escrever seus testes primeiro certamente o faz pensar muito em seu código. Se uma classe precisa de muito clichê ou quebra facilmente, você começa a perceber cheiros ruins muito rapidamente

O principal benefício do TDD é que você perde o medo de refatorar seu código e o força a escrever classes altamente independentes e coesas. Sem um bom conjunto de testes, é doloroso demais tocar em algo que não está quebrado. Com a rede de segurança, você realmente se aventura em mudanças drásticas no seu código. Esse é o momento em que você pode realmente começar a aprender com a prática.

Agora chega o momento em que você deve ler livros sobre padrões e, na minha opinião, é uma completa perda de tempo tentando demais. Eu só entendi muito bem os padrões depois de perceber que fiz algo semelhante, ou poderia aplicar isso ao código existente. Sem os testes de segurança ou hábitos de refatoração, eu teria esperado até um novo projeto. O problema do uso de padrões em um projeto novo é que você não vê como eles afetam ou alteram um código em funcionamento. Só entendi um padrão de software depois de refatorar meu código em um deles, nunca quando introduzi um novo no meu código.

SystematicFrank
fonte
u pode recomendar alguns livros para TDD e refatoração majoritariamente em C ++
Anand
2
Você terá muitos problemas para encontrar conteúdo de qualidade se restringir ao C ++. Além disso, o C ++ não é a linguagem em que você deseja aprender os testes porque, tecnicamente, falta reflexão, isso por si só torna terrivelmente difícil a criação de boas ferramentas de teste. Ainda é possível, mas as comunidades, fóruns, discussões e número de pessoas no TDD são uma minoria no C ++ por causa disso. Eu trabalhei muito com ele, mas, apesar de seus pontos fortes, não é uma linguagem amigável para testes.
SystematicFrank
62

Derek Banas fez tutoriais no YouTube para desenhar padrões que eu gosto muito:

http://www.youtube.com/playlist?list=PLF206E906175C7E07

Eles podem demorar um pouco, mas seu tempo e apresentação os tornam muito agradáveis ​​de aprender.

Pedro Duarte
fonte
35

Prática, prática, prática.

Você pode ler sobre tocar violoncelo há anos e ainda não conseguir colocar um arco no instrumento e fazer qualquer coisa que pareça música.

Os padrões de design são melhor reconhecidos como um problema de alto nível; um que seja relevante apenas se você tiver a experiência necessária para reconhecê-los como útil. É bom que você reconheça que elas são úteis, mas, a menos que você tenha visto situações em que elas se aplicariam ou se aplicaram, é quase impossível entender seu verdadeiro valor.

O ponto em que eles se tornam úteis é quando você reconhece padrões de design no código de outras pessoas ou reconhece um problema na fase de design que se ajusta bem a um padrão; depois examine o padrão formal, examine o problema e determine qual é o delta entre eles e o que isso diz sobre o padrão e o problema.

É realmente o mesmo que codificar; K&R pode ser a "bíblia" para C, mas lê-la de capa a capa várias vezes simplesmente não dá uma experiência prática; não há substituto para a experiência.

Paul Sonier
fonte
5
+1. Eu acho que muitos iniciantes saltam muito rapidamente para os padrões de design e começam a projetar sistemas construídos em torno de fábricas abstratas, singletons, observadores, visitantes etc., diretamente do livro. O resultado geralmente é pesado, não faz o melhor uso da linguagem e nem é tão bem projetado do ponto de vista básico de acoplamento / coesão (o último sofre especialmente quando os padrões de design são mal implementados). É preciso experiência para decidir onde os padrões de design são adequados e ainda mais para decidir como implementá-los da maneira mais apropriada em um idioma específico.
stinky472
25

Prática prática prática. Eu acho que de 4 a 5 livros é até um exercício excessivo de leitura sem uma boa quantidade de prática. A melhor maneira de fazer isso, acredito, é começar a refatorar seus projetos atuais usando os padrões. Ou, se você não tiver nenhum projeto em que esteja trabalhando ativamente, faça do seu jeito e tente refatorar para padrões .

Você não pode apreciá-los completamente se não sofreu os problemas que eles resolvem. E lembre-se de que elas não são balas de prata - você não precisa memorizá-las e aplicar muito rapidamente. Meus dois centavos..

utku_karatas
fonte
15

Faça a si mesmo estas perguntas:

O que eles fazem?

O que eles separam / casal?

Quando você deve usá-los?

Quando você não deve usá-los?

Que recurso de idioma ausente os faria desaparecer?

Em que dívida técnica você incorre ao usá-la?

Existe uma maneira mais simples de fazer o trabalho?

gtrak
fonte
14
e, finalmente, pergunte a si mesmo de onde se pode obter respostas de todos os acima mencionados perguntas
Jatin Dhoot
@JatinDhoot pelo pensamento ..
gtrak
8

Descobri que é um pouco difícil compreender ou entender os benefícios de alguns padrões até que um compreenda os problemas que eles resolvem e o outro (pior) maneiras pelas quais os problemas foram implementados.

Além dos livros do GOF e do POSA, eu realmente não li nenhum, então não posso dar outras recomendações. Na verdade, você só precisa entender os domínios dos problemas e acho que muitos desenvolvedores menos experientes podem não ser capazes de apreciar os benefícios dos padrões. Isso não é desprezível contra eles. É muito mais fácil adotar, entender e apreciar boas soluções quando é preciso lutar primeiro com alternativas ruins.

Boa sorte

Tim
fonte
+1 para entender os problemas que eles pretendem resolver. O desafio é ver os problemas em primeira mão (em um projeto real que tenha importância pessoal). Muitos exemplos de problemas nos livros são (mais) simplificados. Uma das razões pelas quais eu gosto do livro Head First Design Patterns é que eles mostram alguns dos problemas com as soluções ingênuas e quão insustentáveis ​​são essas soluções. Em seguida, eles apresentam o padrão e como está limpo ... Confira o Decorator nesse livro, por exemplo.
Fuhrmanator
8

Muitos bons exemplos foram dados. Eu gostaria de adicionar um:

Aplique-os incorretamente. Você não precisa fazer isso intencionalmente, isso acontecerá quando você tentar aplicá-los no seu ajuste inicial de padrão de design. Durante esse período, todos os problemas que você verá parecerão se encaixar exatamente em um padrão de design. Geralmente, todos os problemas parecem se encaixar no mesmo padrão de design por algum motivo (Singelton é o principal candidato a isso).

E você aplicará o padrão e será bom. E alguns meses depois, você precisará alterar algo no código e verificar que o uso desse padrão específico não foi tão inteligente, porque você se codificou em um canto e precisa refatorar novamente.

É verdade que essa não é realmente uma resposta do tipo faça-e-você-aprender-em-21-dias, mas, na minha experiência, é mais provável que você tenha uma boa idéia do assunto.

Joachim Sauer
fonte
7

Você leu "Design Patterns Explained", de Allan Shalloway.

Este livro é muito diferente de outros livros de padrões de design, porque não é tanto um catálogo de padrões, mas apresenta principalmente uma maneira de decompor um espaço problemático que mapeia facilmente os padrões.

Os problemas podem ser decompostos em duas partes: coisas que são comuns e coisas que variam. Feito isso, mapeamos as coisas comuns para uma interface e as que variam para uma implementação. Em essência, muitos padrões se enquadram nesse "padrão".

Por exemplo, no padrão Estratégia, as coisas comuns são expressas como o contexto da estratégia e as partes variáveis ​​são expressas como as estratégias concretas.

Achei este livro altamente instigante em contraste com outros livros de padrões que, para mim, têm o mesmo grau de excitação que ler uma lista telefônica.

Phillip Ngan
fonte
6

Você já experimentou o livro Gang of Four?

Padrões de Design: Elementos de Software Orientado a Objetos Reutilizáveis

Rohit
fonte
7
Eu não recomendaria esse livro como um livro de "abrir os olhos" :)
Geo
73
Eu o recomendaria como um livro de fechar os olhos. Algumas páginas deste tomo antes de dormir e sua insônia serão coisa do passado.
Dónal
2
cheguei aqui depois, quando eu dormia no meio do dia enquanto lia este livro. procurou por 'entendimento dos padrões de design'. encontrou o post. encontrou o comentário acima. fez o meu dia. Concordo com os outros, a sua um livro de fecho olho
AIMME
5

Para livros, eu recomendaria Design Patterns Explained e Head First Design . Para realmente aprender esses padrões, você deve examinar seu código existente. Procure quais padrões você já está usando. Veja os cheiros de código e quais padrões podem resolvê-los.

David Nehme
fonte
4

Liderei alguns grupos de discussão sobre padrões de design ( nosso site ) e li 5 ou 6 livros de padrões. Eu recomendo começar com o livro Head First Design Patterns e participar ou iniciar um grupo de discussão. O livro Head First pode parecer um pouco Hasboro no começo, mas a maioria das pessoas gosta depois de ler um capítulo ou dois.

Use o recurso destacado - Um Guia de Aprendizado para Design de Padrões, de Joshua Kereivisky, para a ordenação de padrões e para ajudar seu grupo de discussão. Por experiência, a única mudança que sugiro para o pedido é colocar a estratégia em primeiro lugar. A maioria dos desenvolvedores de hoje experimentou alguma encarnação boa ou ruim de uma fábrica, portanto, começar com a fábrica pode levar a muita conversa e confusão sobre o padrão. primeiro encontro.

JB Brown
fonte
3

Eu recomendo o HeadFirst DesignPattern. Ler o livro não é suficiente, depois de assimilar os conceitos, você precisa descobrir as respostas para muitas perguntas que surgem em sua mente e tentar descobrir as aplicações da vida real onde esses padrões podem ser usados. Estou fazendo o mesmo e comecei a fazer perguntas, mesmo essas perguntas parecem bobas.

Rajkumar Vasan
fonte
2

Minha sugestão seria uma combinação de implementar alguns deles e analisar algumas implementações deles. Por exemplo, no .Net, há usos de padrões de adaptadores se você observar Data Adapters, assim como alguns outros, se você se aprofundar um pouco na estrutura.

JB King
fonte
2

Não conheço o melhor livro, mas os puristas podem dizer Padrões de Design: Elementos de Software Orientado a Objetos Reutilizáveis

Quanto ao meu favorito, eu gosto de Head First Design Patterns publicado por O'Reilly. Está escrito em uma voz de conversa que me atrai. Quando o li, revi o meu código-fonte ao mesmo tempo para ver se ele se aplicava ao que estava lendo. Se sim, refatorei. Foi assim que aprendi a Cadeia de responsabilidade.

Prática - Prática - Prática.

Jason Slocomb
fonte
2

Os padrões de design são apenas ferramentas - como funções de biblioteca. Se você sabe que eles estão lá e sua função aproximada, pode retirá-los de um livro quando necessário.

Não há nada de mágico nos padrões de design, e qualquer bom programador descobriu 90% deles antes de qualquer livro ser lançado. Na maioria das vezes, considero os livros mais úteis na simples definição de nomes para os vários padrões, para que possamos discuti-los mais facilmente.

Bill K
fonte
2

A maneira como aprendi padrões de design é escrevendo muitos softwares realmente terríveis. Quando eu tinha uns 12 anos, não fazia ideia do que era bom ou ruim. Acabei de escrever pilhas de código espaguete. Nos dez anos seguintes, aprendi com meus erros. Eu descobri o que funcionou e o que não funcionou. Eu inventei independentemente a maioria dos padrões comuns de design; portanto, quando ouvi pela primeira vez o que eram padrões de design, fiquei muito empolgado em aprender sobre eles e fiquei muito desapontado por ser apenas uma coleção de nomes de coisas que eu já sabia intuitivamente. (aquela piada sobre aprender C ++ em 10 anos não é uma piada)

Moral da história: escreva muito código. Como outros já disseram, pratique, pratique, pratique. Acho que, até você entender por que seu design atual é ruim e procurar uma maneira melhor, não terá uma boa idéia de onde aplicar vários padrões de design. Os livros de padrões de design devem fornecer uma solução refinada e uma terminologia comum para discuti-la com outros desenvolvedores, não uma solução de colar para um problema que você não entende.

rmeador
fonte
2

A noção de que ler padrões de design, praticar codificá-los, não ajudará realmente a IMO. Quando você lê esses livros 1. Procure o problema básico que um padrão de design específico resolve, começando com Padrões de criação é sua melhor aposta. 2. Tenho certeza de que você já escreveu código, analise se enfrentou os mesmos problemas que os padrões de design visam fornecer uma solução. 3. Tente reprojetar / re-codificar o código ou talvez começar de novo.

Sobre os recursos, você pode verificar estes

  1. www.dofactory.com
  2. Padrões de Design: Elementos de Software Orientado a Objetos Reutilizáveis ​​(Série de Computação Profissional Addison-Wesley) de Erich Gamma, Richard Helm, Ralph Johnson e John M. Vlissides
  3. Padrões de arquitetura de aplicativos corporativos de Martin Fowler

1 é início rápido, 2 será um estudo aprofundado .. 3 explicará ou deve fazer você pensar que o que aprendeu em 2 se encaixa no software corporativo.

Meus 2 centavos ...

Perpetualcoder
fonte
1

Eu acho que também é difícil estudar padrões de design. Você precisa saber mais sobre OOP e algumas experiências com o desenvolvimento de aplicativos de médio a grande porte. Para mim, estudo como um grupo de desenvolvedores para discutir. Seguimos um Guia de aprendizado para projetar padrões que eles concluíram o estudo de padrões. Existem desenvolvedores de C # e JavaScript que se juntam. É chique para mim o desenvolvedor de C # escrever códigos em JavaScript e o desenvolvedor de JavaScript fazer a mesma coisa para códigos C #. Depois de sair de uma reunião, também pesquiso e leio alguns livros em casa para revisar. A melhor maneira de entender mais e lembrar em minha mente é criar blogs com exemplos em C # e JavaScript aqui http://tech.wowkhmer.com/category/Design-Patterns.aspx .

Eu sugeriria antes de ir para cada padrão de design, entenda o nome dos padrões. Além disso, se alguém conhece o conceito, explique e dê um exemplo não apenas de programação, mas no mundo da leitura.

por exemplo:

Método de fábrica:

Leia o mundo: eu apenas dou ao dinheiro US $ 5, US $ 10 ou US $ 20 e ele produzirá pizza de volta sem saber nada sobre como produzi-lo, apenas recebo uma pizza pequena, média ou grande dependendo da entrada de dinheiro para que eu possa comer ou fazer o que quiser.

Programação: O cliente passa o valor do parâmetro $ 5, $ 10 ou $ 20 para o método de fábrica e retornará o objeto Pizza de volta. Portanto, o cliente pode usar esse objeto sem saber como ele é processado.

Não sei se isso pode ajudá-lo. Depende do nível de conhecimento das pessoas que participam da reunião.

Vorleak Chy
fonte
O segundo link da resposta está morto.
Pang
1

Eu acho que você precisa examinar alguns dos problemas encontrados como desenvolvedor, onde você arrancou os cabelos depois de revisar seu código pela décima vez, devido a uma outra alteração no design. Você provavelmente tem uma lista de projetos em que sentiu que havia muito retrabalho e dor.

A partir dessa lista, você pode derivar os cenários que os Design Patterns pretendem resolver. Houve um momento em que você precisava executar a mesma série de ações em diferentes conjuntos de dados? Você precisará ter capacidade futura para um aplicativo, mas deseja evitar refazer toda a sua lógica para as classes existentes? Comece com esses cenários e retorne ao catálogo de padrões e seus respectivos problemas que eles devem resolver. É provável que você veja algumas correspondências entre o GoF e sua biblioteca de projetos.

David Robbins
fonte
1

Para um iniciante, os padrões do Head First Design serviriam, assim que estivermos familiarizados com todos os padrões, e tentar visualizar os objetos em tempo real nesses padrões.

O livro ajudará você a entender os conceitos básicos, a menos que, até que você tenha implementado no mundo real, você NÃO PODE SER MESTRE DOS PADRÕES DE DESIGN

gmhk
fonte