Design Patterns — O que são e quais os benefícios?

Daniel Jesus
5 min readOct 10, 2019

--

Quando desenvolvemos um software, é natural encontrarmos desafios. Conforme adquirimos experiência, percebemos que determinados problemas são recorrentes, mesmo em projetos diferentes. Automaticamente, nos lembramos de como solucionamos um desafio parecido anteriormente. É quase como se houvesse um padrão para solucionar certos tipos de problemas que encontramos. Esses padrões são conhecidos como Design Patterns ou Padrões de Códigos.

São padrões de código para solução de problemas conhecidos de design de código que você encontra no seu dia a dia.

O que são Design Patterns?

Os padrões de design ou padrões de projetos são soluções para os problemas de design de software que você encontra repetidamente no desenvolvimento de aplicativos no mundo real. Padrões são sobre projetos reutilizáveis ​​e interações de objetos.

Os 23 padrões de Gang of Four (GoF) são geralmente considerados a base para todos os outros padrões. Eles são classificados em três grupos: Creational, Structural, and Behavioral (para obter uma lista completa, veja abaixo).

Para oferecer uma vantagem, o código-fonte C # para cada padrão é fornecido em 2 formas: estrutural e do mundo real. O código estrutural usa nomes de tipos, conforme definido na definição de padrão e nos diagramas UML. O código do mundo real fornece situações de programação do mundo real nas quais você pode usar esses padrões.

Origem

Em 1978 os arquitetos Christopher Alexander, Sara Ishikawa e Murray Silverstein escreveram um livro chamado “A Pattern Language: Towns, Buildings, Construction” que foi publicado em português com o nome “Uma Linguagem de Padrões”. Neste livro os autores catalogaram 253 tipos de problemas (ou desafios de projeto) e analisaram o que está por trás de cada situação, descrevendo-as na sua essência e propondo uma solução padrão.

Em 1987 durante a segunda edição da OOPSLA (Object-Oriented Programming, Systems, Languages, and Applications) o engenheiro de software Kent Back, que posteriormente foi um dos criadores das metodologias Extreme Programming e Test Driven Development (TDD), junto com Ward Cunningham apresentaram uma palestra intitulada “Using Pattern Languages for Object-Oriented Programs” (Utilizando a linguagem dos padrões para programação orientada a objetos, em tradução livre). Nesta palestra eles propuseram cinco padrões de projetos no campo da ciência da computação.

Mas esses conceitos ficaram realmente conhecidos em 1994, quando os engenheiros de software Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides escreveram o livro “Design Patterns: Elements of Reusable Object-Oriented Software” com o objetivo de catalogar problemas comuns aos projetos de desenvolvimento de software e as formas de resolver esses problemas. Os autores catalogaram 23 padrões que utilizaram ao longo de suas carreiras. Este livro teve mais 500.000 exemplares vendidos e foi publicado em 13 idiomas. No Brasil foi publicado com o nome “Padrões de Projeto — Soluções Reutilizáveis de Software Orientado a Objetos”. Os autores do livro ficaram conhecidos como Gang of Four (Gangue dos quatro) ou “GoF”. Depois disso muitos outros livros surgiram, alguns criticando alguns desses padrões, e outros divulgando novos padrões.

Desde então, Design Patterns tem sido um tema bastante estudado por programadores e arquitetos de software pelo mundo todo.

Christopher Alexander, Sara Ishikawa e Murray Silverstein

Quais os benefícios de usar Design Patterns?

Design patterns são modelos que já foram utilizados e testados anteriormente, portanto podem representar um bom ganho de produtividade para os desenvolvedores.

Seu uso também contribui para a organização e manutenção de projetos, já que esses padrões se baseiam em baixo acoplamento entre as classes e padronização do código.

Além disso, com a padronização dos termos, as discussões técnicas são facilitadas. É mais fácil falar o nome de um design pattern em vez de ter que explicar todo o seu comportamento.

Design Patterns mais conhecidos

Os padrões do GoF são os mais conhecidos, porém existe uma série de outros padrões catalogados. Neste artigo procurei citar os padrões de projeto mais conhecidos e que são considerados como boas práticas pelo mercado.

Por vezes alguns padrões deixam de ser utilizados devido a evolução das linguagens de programação e a utilização de novos padrões que melhor atendem alguns cenários. Um exemplo disso é o padrão Service Locator, que acabou caindo em desuso devido aos padrões Dependency Injection e Inversion of Control, que juntos conseguem desacoplar as dependências de uma forma mais organizada que o Service Locator.

Design Patterns GoF

Os autores do livro “Design Patterns: Elements of Reusable Object-Oriented Software” agruparam os Design Patterns em três tipos diferentes: Creational (Criação), Structural (Estrutura), Behavioral (Comportamental).

Creational Design Patterns

  • Abstract Factory
  • Builder
  • Factory Method
  • Prototype
  • Singleton

Structural Design Patterns

  • Adapter
  • Bridge
  • Composite
  • Decorator
  • Façade
  • Flyweight
  • Proxy

Behavioral Patterns

  • Chain of Responsibility
  • Command
  • Interpreter
  • Iterator
  • Mediator
  • Memento
  • Observer
  • State
  • Strategy
  • Template Method
  • Visitor

Padrões arquiteturais

  • Interceptor
  • Model View Controler (MVC)
  • Model View ViewModel (MVVM)
  • Model View Presenter (MVP)
  • n-tier
  • Specification
  • Publish–subscribe
  • Inversion of control

Outros Design Patterns

  • Rules Design Patterns
  • Dependency Injection
  • Intercepting filter
  • Lazy loading
  • Mock object
  • Method chaining
  • Inversion of control
  • Unit of Work

23 Padrões Fundamentais GoF

Atualmente existem mais de 80 padrões conhecidos que são em geral variações dos 23 patterns do GoF.

Aqui estão os 23 design patterns fundamentais:

Cada letra representa uma família de pattern por exemplo : Letra C = Creational Design Patterns / Letra B= Behavioral Patterns / Letra S= Structural Design Patterns

Conclusão

Conhecer Design Patterns é algo de extrema importância no desenvolvimento de qualquer software. A utilização desses padrões nos ajuda a desenvolver de forma mais rápida frente a desafios semelhantes, fornece uma linguagem comum durante a documentação e discussões técnicas além de nos auxiliar a organizar o código fonte do software que estamos desenvolvendo.

Em breve irei mostrar na prática exemplos de como aplicar esses patterns.

Fiquem ligados!

Espero que tenham gostado!

--

--

Daniel Jesus

Sênior Software Engineer, Technical Writer and Speaker, Microsoft Certified Professional