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?
design-patterns
anand
fonte
fonte
Respostas:
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.
fonte
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.
fonte
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:
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.
fonte
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.
fonte
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.
fonte
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..
fonte
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?
fonte
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
fonte
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.
fonte
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.
fonte
Você já experimentou o livro Gang of Four?
Padrões de Design: Elementos de Software Orientado a Objetos Reutilizáveis
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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 é 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 ...
fonte
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.
fonte
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.
fonte
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
fonte