Campo de busca

Categoria Programação

O que são Design Patterns?

O que são Design Patterns?

Por , | 12 de março, 2012 | 19 comentários

Design patterns (padrões de projeto) surgiram com a motivação de ajudar a solucionar problemas que ocorrem frequentemente, e, se usados com bom senso, podem se tornar ferramentas poderosas para qualquer desenvolvedor de software, uma vez que já foram testadas, utilizadas e aprimoradas a partir da experiência e conhecimento de outros programadores.

Preparamos um post explicando o que são design patterns e seus princípios comuns, baseado no livro “Professional ASP.NET Design Patterns” de Scott Millett.

Design Patterns - Vida de Programador

Tirinha retirada do site Vida de Programador, o qual publica tirinhas diárias com histórias engraçadas e verídicas sobre o dia-a-dia de um programador.

Explicando Design Patterns

Design patterns (Padrões de projeto) são soluções de templates abstratas de alto nível. Pense nelas como um “blueprint” (desenho técnico ou documentação de uma arquitetura, etc.) para soluções e não como uma solução por si própria. Você não achará um framework que você poderá simplesmente aplicar para a sua aplicação; ao invés disso, você chegará ao design patterns através da refatoração do seu código e generalização do seu problema.

Design patterns não são somente aplicados em desenvolvimento de software; design patterns podem ser encontrados em diversas áreas da vida, da engenharia até da arquitetura. Em fato, foi o arquiteto Christopher Alexander que introduziu a ideia de patterns em 1970 para construir um vocabulário comum para discussões sobre design. Ele escreveu:

Cada pattern descreve um problema que ocorre várias vezes ao nosso redor e com isso, descrevem a solução para o problema de uma maneira que você pode usar essa solução diversas vezes sem ter que fazer a mesma coisa duas ou mais vezes.

Origem

As origens do design patterns que prevalecem hoje na arquitetura de software nasceram das experiências e conhecimento dos programadores utilizando a programação orientada a objeto. O conjunto dos mais conhecidos design patterns estão catalogados no livro chamado “Design Patterns: Elements of Reusable Object-Oriented Software”, mais conhecido como “Design Patterns Bible”. Esse livro foi escrito por Erich Hamma, Richard Helm, Ralph Johson e John Vlissdes, mais conhecidos como “Gang of Four”.

Eles coletaram 23 design patterns e organizaram em 3 grupos:

  • Creational Patterns (Padrões de Criação): Tratam da construção do objeto e o de referência;
  • Structural Patterns (Padrões Estruturais): Tratam da relação entre objetos e como eles interagem entre sim para formarem grandes objetos complexos;
  • Behavioral Patterns (Padrões Comportamentais): Tratam da comunicação entre os objetos, especialmente em termos de responsabilidade e de algoritimos.

Utilidade

O valor dos design patterns reside no fato que eles são soluções que foram utilizadas e testadas, o que nos dá confiança em sua eficácia.

Design patterns focam na reutilização de soluções. Todos os problemas não são iguais, mas se você puder “quebrar” o problema e achar similiaridades com problemas que você já resolveu antes, você pode aplicar essas soluções. Depois de décadas de programação orientada a objeto, a maioria dos problemas que você encontrará já terão sido resolvidas no passado, e haverá um pattern disponível para ajudar você na implementação da solução. Mesmo se você acredita que o seu problema é único, ao quebrá-lo em pequenas partes, você será capaz de generalizá-lo o suficiente para encontrar a solução apropriada.

O nome dos design patterns são úteis porque refletem o seu comportamento e propósito, e fornecem um vocabulário comum em um brainstorming de solução. É muito mais fácil falarmos em termos do nome do pattern do que detalhar sobre como essa implementação deveria funcionar.

O que eles não são

Design patterns não são a bala de prata (solução de todos os problemas). Você deve ter o entendimento geral do seu problema, generalizá-lo e então aplicar o pattern apropriado para a solução desse problema. Porém, nem todos os problemas requerem um design pattern. É verdade que o design pattern pode ajudar a tornar problemas complexos em problemas simples, porém eles também podem tornar problemas simples em problemas complexos.

Princípios comuns de design

Há diversos princípios comuns de design, que, assim como os design patterns, se tornaram boas práticas através dos anos e ajudaram a formar uma fundação no qual o nível empresarial e software de fácil manutenção podem ser construídos. Abaixo, segue um resumo dos princípios mais conhecidos:

Keep It Simple Stupid (KISS)
Mantenha Isto Estupidamente Simples

Um problema comum em programação de software é a necessidade de complicar demais a solução. O objetivo do princípio KISS é manter o código simples, mas não simplista, assim evitando complexidade desnecessária.

Don’t Repeat Yourself (DRY)
Não Repita Você Mesmo

O princípio do DRY é evitar a repetição de qualquer parte do sistema abstraindo as coisas que são comuns entre si e colocá-las em um lugar único. Esse princípio não se preocupa somente com o código, mas qualquer lógica que está duplicada no sistema.

Tell, Don’t Ask
Fale, não pergunte

O principio Tell, Don’t Ask está estreitamente alinhado com o encapsulamento e a atribuição de responsabilidades para as suas classes corretas. O princípio afirma que você deve dizer aos objetos quais ações você quer que eles realizem, ao invés de fazer perguntas sobre o estado do objeto e então tomar uma decisão por si próprio em cima da ação que você quer realizar. Isso ajuda a alinhar as responsabilidades e evitar o forte acoplamento entre as classes.

You Ain’t Gonna Need It (YAGNI)
Você Não Vai precisar Disso

O princípio YAGNI se refere a necessidade de adicionar somente as funcionalidades que são necessárias para a aplicação e deixar de lado qualquer tentação de adicionar outras funcionalidades que você acha que precisa. A metodologia de projeto que adere ao YAGNI é a test-driven development (TDD) – desenvolvimento orientado a testes. TDD se baseia na escrita de testes que comprovam a funcionalidade do sistema e então escrevem somente o codigo para obter êxito no teste.

Separation Of Concerns (SoC)
Separação de Responsabilidades

SoC é o processo de dissecação de uma parte de software em distintas características que encapsulam um único comportamento e dados que podem ser utilizados por outras classes. Geralmente, a responsabilidade representa uma características ou comportamento da classe. O ato de separar um programa em discretas responsabilidades aumenta significativamente a reutilização de código, manutenção e testabilidade.

Fonte: Professional ASP.NET Design Patterns

 

Deixe um comentário

Queremos saber o que você pensa sobre esse post! Ficaremos felizes se você nos deixar um comentário :-)

Tenha em mente que os comentários são moderados, e os links possuem rel="nofollow". Então por favor, não faça spam de palavras-chave, senão o seu comentário será excluído. Obrigado!

 

[19] Comentários  

Rafaela – Tudo em Foco

Muito explicativo esse artigo. Muitas vezes, a pessoa até tem certo conhecimento, mas não sabe como utilizar os design patterns. Isso pode afetar bastante o trabalho, deixando mais moderado e o resultado também pode acabar sendo afetado com isso. Acho que é importante explicar exatamente para que servem e como utilizar e isso foi muito bem feito no texto.

13-03-2012 às 22:01 Responder

Brayan Dichtl

Muito bom o esclarecimento de Design Patterns abordado…

19-06-2013 às 20:59 Responder

isNil

É isso aí, conceitos que fazem a diferença na produção de códigos limpos e com qualidade.

30-09-2013 às 15:27 Responder

Vinícius Stutz (vinicius-stutz.com)

Muito legal mesmo seu artigo, todo desenvolvedor .net tinha que ler! Parabéns!

06-12-2013 às 18:08 Responder

Gabber

Bacana o post, porém gostaria de saber como funciona na prática!

10-12-2013 às 10:10 Responder

Angelito

Ótimo post, parabéns! ;)

20-02-2014 às 07:35 Responder

Matheus

Achei excepcional a explicação e o assunto é muito interessante!!! Talvez deste artigo tenha surgido o assunto a ser abordado no TCC do meu curso de Análise e Desenvolvimento! Parabéns!

28-02-2014 às 21:58 Responder

Leonardo

Muito bom mesmo, ótimo artigo!

04-05-2014 às 10:30 Responder

Francisco G Lima

Muito bom. O post na sua simplicidade mostra os conceitos e deixa tudo muito bem claro. Agora vou ver onde consigo ver casos de uso na plataforma dot.net. Vocês teriam alguma posto ou link com exemplos?

19-08-2014 às 10:09 Responder

Rodolfo Pereira

Rodolfo Pereira

Em resposta a Francisco G Lima

Fala Francisco,

Temos alguns posts que mostram na prática a utilização de alguns Design Patterns no ASP.NET: http://www.princiweb.com.br/blog/programacao/design-patterns/

Para um melhor estudo, recomendo este livro: http://www.wrox.com/WileyCDA/WroxTitle/Professional-ASP-NET-Design-Patterns.productCd-0470292784.html

Abs!

15-10-2014 às 11:08 Responder

Eliomar

Em resposta a Rodolfo Pereira

Valeu!!!! Bem explicativo.

05-03-2015 às 08:55 Responder

Tiago

Somente depois que tive contato com métodos ágeis é que conheci esses princípios, e desde então procuro trabalhar baseados neles e também em S.O.L.I.D, mas o que me frusta é que ainda não se da a devia importância sobre esse tema em faculdades, cursos e principalmente no trabalho.

05-07-2015 às 08:48 Responder

Rodrigo

Copiou isso do Macoratti? Ao menos cite a fonte...

11-09-2015 às 18:24 Responder

Rodolfo Pereira

Rodolfo Pereira

Em resposta a Rodrigo

Oi Rodrigo,

Não copiamos do Macoratti... a fonte deste post foi o livro Professional ASP.NET Design Patterns. Vou atualizar o post :)

Abs!

17-09-2015 às 12:54 Responder

Luciano

Achei muito interessante, embora estou apenas começando a aprender.

17-02-2016 às 09:48 Responder

Jonatas Santos

Parabéns pelo artigo e muito obrigado por compartilhar!
Me ajudou bastante :D

15-06-2016 às 13:47 Responder

ICARO REGO

Nossa, muito bom o post! Passei meia hora procurando material sobre esse assunto.

10-08-2016 às 21:26 Responder

Carlos Bueno

Muito bom artigo. Sempre prego, que esse conteúdo deve estar na ponta da língua para desenvolvedores OO.
Escrevi um livro sobre o assunto pela Editora Casa do Código, acredito que o conteúdo é bem complementar ao que foi tratado aqui, adoraria saber sua opinião sobre ele, caso queira posso encaminhar uma cópia pra ti, mas segue link do livro:

https://www.casadocodigo.com.br/products/livro-guia-mestre-programador

20-06-2017 às 22:46 Responder

Adriano Hendler

Obrigado, esta muito bem explicado.

03-08-2017 às 14:26 Responder