Aprendizagem / implementação de padrões de design (para iniciantes) [fechado]

85

Eu sou um novato confuso e programador amador tentando entender isso, então me perdoe se minha pergunta for um pouco errada ou não fizer muito sentido.

Vejo muitas perguntas sobre o SO girando em torno do uso de padrões de design e me pergunto se alguém tem bons recursos para aprender e implementar padrões de design? Eu entendo a ideia geral e sei como / quando usar alguns deles (Singletons, métodos de fábrica), mas sei que estou perdendo.

(Caso seja importante, minha linguagem de preferência é C #, mas eu poderia aprender com exemplos em outras linguagens)

Ashlocke
fonte

Respostas:

84

Padrões de design da cabeça primeiro

texto alternativo

e a página da Wikipedia do Design Pattern são os melhores recursos para iniciantes. FluffyCat é outro bom recurso online gratuito para padrões de projeto em Java e PHP .

O livro da Gangue dos Quatro é para onde ir depois, mas é bastante avançado, então eu esperaria até que você tenha uma compreensão bem firme dos outros recursos.

Bill the Lizard
fonte
4
Existem exemplos de código C # para Padrões de Design Head First disponíveis em msquaredweb.com/DesignPatterns/…
toolkit
5
Eu olhei para aquele livro ... odiei. Então peguei o livro GoF e aprendi tudo sobre padrões de projeto com ele. Foi meio seco, mas muito mais informativo.
Thomas Owens
1
Inicialmente pensei que o livro head first ia ser completamente nauseante (é pesado em metáforas, aparências e tem um tom muito coloquial) .. mas é realmente muito inventivo e informativo; Estou muito feliz por ter corrido o risco e comprado. Imo, escolhendo gangue de quatro = masoquismo desnecessário.
codeinthehole
2
Achei o livro do primeiro livro completamente nauseante. Ele passa tanto tempo sendo "divertido" que acho que comunica mal as ideias-chave - elas se perdem. Ler é como ver o pai de alguém tentando ser legal. Mas o livro GoF é o outro extremo e, portanto, não é para todos.
Draemon
2
@Bill: Eu sei, mas concordo com os comentários de @Thomas e @Draemon. Amigos meus não orientados para programação que recomendaram esta série de livros para algoritmos de aulas de programação, odiaram-nos e acabaram ficando em livros "mais secos" porque a quantidade de informação por página era maior. É apenas uma questão de preferência. Leio livros técnicos desde jovem e frequentei um colégio altamente técnico, o que deve ter me acostumado a ler livros "secos". Eu prefiro livros que não tenham animais de estimação falando mal de mim e me desviando, mas sim informações simples para eu assimilar.
Esteban Küber
27

Os padrões de design são ótimos por vários motivos:

  1. oferece um ponto de partida para a solução de problemas comuns.
  2. fornece aos desenvolvedores um vocabulário para falar sobre certas maneiras de resolver problemas de uma maneira muito compacta.
  3. ao trabalhar com desenvolvedores que conhecem padrões de design e você usa padrões de design em suas soluções, eles entenderão as soluções com muito mais rapidez.

Mas quando seu objetivo é apenas aprender padrões de design, acho que você está perdendo os fundamentos. Todos os padrões de design são baseados em princípios mais comuns. Princípio de alta coesão, baixo acoplamento aberto fechado, DRY, princípio de substituição de Liskov etc. Para esses fundamentos, eu leria os seguintes livros nesta ordem:

  1. Análise e design orientado a objetos da Head First (Head First) [ILUSTRADO] (Brochura)
  2. Aplicação de UML e padrões (capa dura)
  3. Princípios, padrões e práticas ágeis em C # (série Robert C. Martin) (capa dura)

Depois disso, você está pronto para a gangue básica de quatro padrões de design

  1. Padrões de design da cabeça primeiro (cabeça primeiro) [ILUSTRADO] (brochura)
  2. A Bíblia
  3. Um bom site (não compre nada, não vale a pena) http://dofactory.com/Patterns/Patterns.aspx (algumas implementações deste site merecem uma discussão

O próximo passo:

  1. Padrões de arquitetura de aplicativos corporativos (série Addison-Wesley Signature) (capa dura)
  2. Os livros POSA

E lembre-se sempre: o padrão não é o objetivo!

KeesDijk
fonte
2
Acho que os fundamentos de OO (encapsulamento, herança, polimorfismo, etc.) são suficientes para o conhecimento para começar a aprender padrões de projeto. Você pode aprender os outros princípios (alta coesão, princípio de baixo acoplamento aberto fechado, DRY, princípio de substituição de Liskov etc.) por meio de padrões de aprendizagem.
Bill the Lizard,
Concordo que você pode aprender padrões de projeto apenas com os fundamentos do OO. Mas então você chega ao ponto em que pode fazer um padrão funcionar, mas ainda não entende completamente por que esse é um bom design, quais compensações você fez e como pode fazer variações nos padrões.
KeesDijk,
20

Eu acrescentaria que o livro Design Patterns da "Gang of Four" é uma bíblia para quem está seriamente interessado em padrões de design.

Leopold Cimrman
fonte
13
Ou para quem quiser contar a seus amigos programadores que leram o livro da Gang of Four :)
Dave Markle
14

Minha dica:

Leia muito sobre os padrões de diferentes fontes.

Tentar forçar o máximo de padrões possíveis em todo o código que você está escrevendo, pois neste ponto, não vai dar bons resultados. Em vez disso, deixe a informação descansar dentro de seu cérebro por um tempo (leia-se: meses).

De repente, você se deparará com um problema ou parte do código e lembrará vagamente que viu algo que pode funcionar como uma solução para esse problema específico. Agora é a hora de examinar os detalhes do padrão em que você está pensando e tentar aplicá-lo.

Isso é o que funcionou para mim, de qualquer maneira.

Lars A. Brekken
fonte
9

Padrões de design

Este site de tutorial contém as seguintes subseções

  • Intenção de cada padrão de design
  • Estrutura do mundo real para o padrão de design
  • Uma declaração de problema
  • Discussão detalhada sobre o problema
  • Lista de verificação sobre como chegar a um padrão
  • Regras básicas ao chegar ao padrão.
  • Snippets de código para o padrão de design que inclui C #, C ++, Delphi, Java e PHP

Este site também contém um guia sobre Anti-Patterns , UML e Refatoração .

pramodc84
fonte
Achei o site muito útil. Bons exemplos claros.
Augustas
8

Bruce Eckel tem um livro sobre padrões de design , embora seja Java, é como todos os seus livros incríveis. E o melhor é que são grátis!

Jan Gressmann
fonte
Obrigado pelo link, não percebi que estava funcionando gratuitamente on-line.
James McMahon
5

Um livro introdutório que achei útil e bem escrito é Design Patterns Explained por Alan Shalloway e James Trott (Addison Wesley).

texto alternativo

Você não começar a partir do Gang of Four livro, pois não é um livro introdutório, por qualquer meio.

Federico A. Ramponi
fonte
4

Eu recomendaria dar uma olhada na quintologia de Jean Paul Boodhoo (?) Em Desmistificando Padrões de Design em DNRtv, urls fornecidas abaixo. Os videocasts abordam Singleton, Abstract Factory, entre outros - a diferença é que você pode vê-lo codificar enquanto discute a teoria. É bom cuidar do almoço em um dia chuvoso da semana.

http://www.dnrtv.com/default.aspx?showNum=63 http://www.dnrtv.com/default.aspx?showNum=65 http://www.dnrtv.com/default.aspx?showNum= 68 http://www.dnrtv.com/default.aspx?showNum=71 http://www.dnrtv.com/default.aspx?showNum=92

David Pike
fonte
DnrTV está fora do ar! É uma pena, porque os screen-casts do Boodhoo são informativos. Você já viu os vídeos hospedados em outro lugar? Você tem os arquivos de vídeo? Ficarei feliz em mantê-los online.
Stephan Luis
4

Uma anotação para os comentários acima.

Uma referência rápida para padrões GOF

Este é um bom lugar onde você pode começar dofactory.com/patterns/patterns.aspx - você pode encontrar o link para cada padrão, junto com as implementações correspondentes.

No entanto, lembre-se de que esses são padrões GOF. Você também pode precisar ler e compreender os padrões avançados, uma vez que você obtenha experiência suficiente em OOAD. Use Head First Design Patterns é um bom começo e, depois de fazer algum progresso, vá com os Enterprise Application Architecture Patterns de Martin Fowler.

Aplicando Padrões de Design - O Processo de Pensamento

Outro aspecto principal - Aplicar padrões de design é tão importante quanto apenas conhecê-los. A leitura desses artigos também pode ajudá-lo.

Aplicando Padrões de Projeto Parte I

Aplicando Padrões de Projeto - Parte II

Espero que isto ajude

espantado
fonte
3

Head First Design Patterns é bom, como outros já mencionados. Além disso, é claro o livro original e C # Design Patterns. Também existem bons sites já mencionados.

Além da autoaprendizagem, recomendo seriamente começar ou frequentar um grupo de estudos de padrões em sua área. Veja um Guia de Aprendizagem para Padrões de Projeto para obter uma explicação e uma ótima ordem para estudar os padrões. Fizemos isso e posso dizer honestamente que não entenderia tanto quanto entendo agora. Uma reunião semanal com outras pessoas interessadas mantém você surpreendentemente disciplinado ao aprender algo abstrato, como padrões de projeto.

Bons estudos!

mmiika
fonte
3

Antes de gastar dinheiro em livros, eu recomendaria a excelente página de padrões de design da Wikipedia . Também procure algo diferente no Google para "screencasts de padrões de design" ou pesquise "padrões de design" no YouTube . Obter as mesmas informações apresentadas de maneira diferente geralmente ajuda a diminuir o centavo.

O livro Gang of Four é o texto definitivo sobre os padrões mais conhecidos, mas não é tão fácil de ler e com exemplos de C ++ nem todos os favoritos.

O texto Head First Design Patterns é muito mais acessível, mas contém apenas um subconjunto dos padrões da Gang of Four.

O mais importante é entender onde e por que um determinado padrão é útil. Em seguida, pesquise na web por exemplos de implementação na linguagem de sua escolha e experimente até "entender". Compreenda um padrão antes de passar para o próximo. Todo mundo entende alguns padrões melhor do que outros (e existem centenas de padrões menos conhecidos).

Apenas continue plugando.

Royd Brayshay
fonte
2

Patterns of Enterprise Application Architecture (capa dura) de Martin Fowler

Refatorando para padrões (capa dura) por Joshua Kerievsky

Integração contínua: Melhorando a qualidade do software e reduzindo riscos (brochura) por Paul Duval et.al.

Além da arquitetura de software: criando e sustentando soluções vencedoras (brochura) de Luke Hohmann

Elie
fonte
2

Os padrões de design são como qualquer função de biblioteca, leia sobre eles e, quando surgir um problema, o padrão de design estará em seu "Toolchest". Existem muitos livros de padrões de design, todos padronizados de acordo com os padrões de design da "Gangue dos quatro" originais.

Para qualquer programador, acho que isso e o livro Refatoração de Fowler são os requisitos mínimos absolutos.

Bill K
fonte
Os livros POSA não foram "padronizados de acordo com o livro GOF" - o GOF foi o primeiro a ser publicado - eles estavam em produção ao mesmo tempo.
Tim,
1
Apenas para evitar qualquer confusão, quero dizer que a MAIORIA dos padrões de design NÃO são implementados em uma biblioteca. Muitos padrões são formados pela combinação de classes de biblioteca.
Bill the Lizard,
Eu fiz soar como se eles pudessem ser feitos em uma biblioteca - desculpe por isso, obrigado pelo esclarecimento, Bill. Os padrões de projeto são geralmente bibliotecas LIKE, mas coisas que você normalmente não pode COLOCAR em uma biblioteca - como maneiras diferentes de interação entre classes desconhecidas.
Bill K,
2

Para sites, um site muito bom é http://ajaxpatterns.org , de um dos desenvolvedores do site ajaxian

Ken Penn
fonte
2

O livro Design Patterns original é leitura obrigatória para todos os programadores.

É um livro excelente em todos os níveis: layout, clareza, percepção, profundidade. É um daqueles grandes livros que você primeiro lê de capa a capa e depois usa como referência até que você literalmente saiba de dentro para fora.

Você poderia começar pela página da Wikipedia , mas mime-se com o grande livro também.

ddaa
fonte
2

Aplicando UML e Padrões de Craig Larman. Comece com o básico de análise, projete e use um cenário de caso simples. Apresenta a maioria dos padrões básicos de maneira simples.

skinp
fonte
2

Se você ler sobre padrões de projeto, notará que o Java parece ter alguns deles implementados.

Consulte o código-fonte de qualquer estrutura e você poderá obter informações sobre os padrões de projeto. Pessoalmente, não os vejo se encaixando perfeitamente em nenhum dos meus códigos, às vezes os exemplos em livros e tutoriais parecem um pouco idealizados, especialmente para o codificador solitário.

Os padrões de design não são para programadores preguiçosos.

Peter Turner
fonte
2

Para mim e meus colegas estudamos Design Pattern que segue no Pattern Study Group . Eles preparam uma lista de cada padrão que devemos aprender em ordem e também têm as perguntas de abertura que fazem mais discussão em grupo.

Samnang
fonte
1

Eu também sugiro ter um shufty em Refatoração para Padrões depois de ler Padrões de Projeto com a Cabeça Primeiro.

Observação: os exemplos de código estão em Java, mas devem ser muito semelhantes aos exemplos C # ...

conjunto de ferramentas
fonte
1

Não faz muito sentido para mim que alguém com muito pouca experiência mergulhe muito profundamente nos padrões de design. É ótimo saber que eles existem, mas neste ponto você deve se concentrar mais em outras coisas, em vez de apenas aprender sobre os padrões de projeto.

Eles são úteis no contexto de um problema - como um conceito para um desenvolvedor novo / iniciante, eles não têm muito valor prático além da forma, sabendo que você deve fazer uso deles quando e onde puder.

EDIT Para esclarecer - muitos padrões de projeto são resultado de problemas encontrados em alguns domínios. Dificilmente se pode esperar que um novo programador (IMO) conheça o (s) padrão (ões) de design a ser usado para alguns conjuntos de problemas. Assim como temos um conhecimento superficial de algoritmos em estudos de CS, precisamos entender o que podemos fazer com padrões e seus benefícios, mas quando uma pessoa ainda está construindo hello world ou descobrindo stl, não há muita necessidade prática de padrões de projeto. Os padrões são ótimos. Mas eles não são a bala de prata.

(Nem era CASE (ferramentas), nem é / era UML, nem é SCRUM, nem é TDD, nem STL, nem Java, nem XML, etc.) Estes são apenas aspectos de nossa profissão e tratar esses tópicos como o segundo vir é ingênuo.

Tim
fonte
Mas se você não conhece os padrões, não saberá se existe algum que trate do seu problema específico. Sim, como um novato provavelmente você NÃO PRECISA de um padrão, mas é importante aprender os padrões antes que essa necessidade surja.
Elie
Acho que cobri isso na minha postagem ...
Tim,
Você precisa ter mais do que apenas saber que eles existem ... você precisa saber como eles funcionam e o tipo de situação em que são usados. Isso é um pouco mais do que conhecimento superficial. Pode levar anos até que você use um padrão, mas quando o fizer, não será o momento de aprender o padrão.
Elie
Então você está dizendo que um novato precisa aprender e compreender dezenas ou mais padrões? O que sai da mesa nesse meio tempo? Não estou argumentando contra os padrões. E também não acho que aprender os detalhes de um JIT de padrão seja uma coisa ruim. Padrões de aprendizagem antes de outras coisas O IMO não é útil
Tim,
1

Os padrões compreendem o vocabulário de alto nível que os programadores usam para falar sobre design abstrato. Se você estiver reutilizando uma solução abstrata, é útil referir-se a ela pelo nome. Se você inventar um padrão, é profissional fazer uma pequena verificação para ter certeza de que ele ainda não recebeu um nome. Se tiver sido nomeado, a descrição pode ser útil.

Depois de codificar um pouquinho, você perceberá que está escrevendo algo semelhante ao que codificou antes. Este é um padrão. Mesmo que seja um padrão minúsculo, vale a pena notar. Existe um padrão melhor? Você vê certos padrões minúsculos cooperando juntos para resolver um problema maior? Bem, da próxima vez, quando você quiser resolver um problema maior, todo o padrão vem à sua mente como um único pedaço. Desenvolver as linhas de código detalhadas torna-se mecânico.

Quanto mais você notar os padrões, mais fácil se tornará a programação e mais você apreciará alguns dos maiores e melhores padrões desenvolvidos por outros programadores. Tente dominar o padrão MVC. De uma forma ou de outra, as variações aparecem em todos os lugares, mesmo em pequenas decisões de design.

dongilmore
fonte
1

Depois de entender o conceito, analise o código-fonte ou design do Eclipse, muitos exemplos realmente bons desses padrões (sem surpresa, Gamma foi um dos designers).

Uri
fonte