A ESTRADA A FRENTE
Com os padrões apresentados aqui, espero que você tenha uma ideia melhor das vantagens de utilizá-los e dos benefícios que eles proporcionam.
Padrões de Projeto são uma excelente ferramenta pois, além dos benefícios no código, eles também facilitam as conversas dentro do time. Se uma pessoa disser que refatorou aquele código que estavam trabalhando ontem pra utilizar um Simple Factory, você já sabe o que foi feito sem precisar entrar em muitos detalhes de como foi implementado.
Como explorado no começo do artigo, existem vários livros que apresentam padrões para linguagens Orientada a Objetos e outros mais específicos para plataformas e linguagens. Procure o material que melhor se adequa ao seu contexto e continue aprendendo sobre essas soluções.
APLICANDO PADRÕES DE PROJETO
Utilizar padrões de projeto também tem suas desvantagens, a principal é que eles criam uma estrutura um tanto quanto complexa de classes, utilizando-se de herança e delegando chamadas para dar ao código final mais flexibilidade na sua utilização e manutenção.
Criar muitas classes não é necessariamente algo ruim, lembre-se da discussão no começo do artigo: a ideia do paradigma Orientado a Objetos é esconder os dados e facilitar a interação entre objetos. Se você está utilizando uma linguagem Orientada a Objetos, não deve ter medo de criar novas classes ou extrair partes do comportamento, mas é importante saber quando vale a pena fazê-lo.
Apesar do código ficar mais simples, separado em pequenos métodos, quem não conhece os padrões vai precisar entender as várias classes que são criadas e seguir o fluxo do código para entender o que está acontecendo.
A principal dica para utilizar Padrões de Projeto de maneira eficiente é: evite escrever código aplicando um Padrão de Projeto, prefira refatorar para um padrão. Se o código não precisa da flexibilidade proporcionada pelos padrões, evite complicá-lo.
Deixe que seu código evolua e que as regras de negócio lhe digam o que deve ser melhorado. Quem desenvolve utilizando TDD (Test-Driven Development) pode pensar em aplicar um padrão durante a etapa de refatoração, pois terá mais entendimento dos requisitos e da implementação necessária, além da segurança dos testes automatizados.
Antes de decidir refatorar o código para aplicar um Padrão de Projeto, veja quais princípios ele está ferindo e tente fazer correções mais simples. Não se torne um dicionário de padrões, forçando situações para aplicá-los. Pense no contexto do seu problema primeiro e depois na solução que irá aplicar.
Refatorando com Padrões de Projeto
Quando o seu contexto realmente permitir aplicar um padrão, vá em frente e refatore o código. Dê pequenos passos, sempre atualizando testes e garantindo que tudo continua funcionando. Encare os Padrões de Projeto como um destino final de uma caminhada que começa com pequenos passos de refatoração.
Outra grande vantagem dos Padrões de Projeto é que eles são soluções que foram aplicadas por várias pessoas e, como ainda são conhecidos até hoje, resolvem bem o problema. Então ao aplicar um padrão você está utilizando um código que já foi validado por várias pessoas em vários projetos diferentes.
No artigo Is Design Dead, (veja a seção de Referências Externas) Martin Fowler sugere alguns pontos para aproveitar ao máximo os padrões de projeto:
- Invista tempo aprendendo sobre padrões;
- Concentre-se em aprender quando aplicá-los (não muito cedo);
- Concentre-se em como implementar padrões na sua forma mais simples, e adicionar complexidade depois;
- Se você adicionar um padrão, e depois perceber que ele não está ajudando, não tenha medo de removê-lo.
No livro “Refatorando com Padrões de Projeto” são apresentados vários padrões, tendo como plano de fundo um código que será refatorado para aplicar um padrão. Se quiser se aprofundar mais no tema, leia mais em: http://www.casadocodigo.com.br/products/livro-refatoracao-ruby
Espero que o conteúdo apresentado possa ajudar nos primeiros passos e que tenha lhe motivado a ir mais longe. Não deixe de conferir os recursos indicados no final do texto para ter uma visão mais aprofundada do conteúdo e saber quais são os próximos passos.
REFERÊNCIAS EXTERNAS
http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_en
Email do Dr. Alan Kay sobre a origiem da Programação Orientada a Objetos
http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod
Artigos sobre Princípios de Design Orientado a Objetos no site de Robert C. Martin
http://martinfowler.com/articles/designDead.html
Artigo “Is Design Dead” no site de Martin Fowler
http://casadocodigo.com.br/products/livro-refatoracao-ruby
Livro Refatorando com padrões de projeto de Marcos Brizeno
https://brizeno.wordpress.com/padroes
Exemplos com outros padrões da Gangue dos Quatros no site de Marcos Brizeno
SOBRE O AUTOR
Cientista da Computação pela Universidade Estadual do Ceará e Consultor de Desenvolvimento na ThoughtWorks Brazil. Apaixonado por Engenharia de Software e Metodologias Ágeis.
Autor do livro Refatorando com Padrões de Projetos e com contribuições no Thoughtworks Antologia Brasil e Práticas e Tendências em Testes.
Publica regularmente no blog brizeno.wordpress.com e em @marcosbrizeno.