Do que trata o artigo

Este artigo trata da aplicação prática de design patterns em problemas reais que enfrentamos no dia-a-dia. Construiremos um pequeno framework orientado a objetos e ao longo do desenvolvimento iremos implementar alguns design patterns para resolver problemas reais do sistema.


Para que serve

A aplicação de design patterns pode aumentar a qualidade de seus sistemas, pois tratam-se de soluções testadas e aprovadas para problemas comuns do desenvolvimento de software. Com o uso de patterns você pode reduzir acoplamento, aumentar a coesão, melhorar a legibilidade de seu código e aumentar o grau de reuso do mesmo.


Em que situação o tema é útil

Design patterns são exatamente soluções para resolver problemas corriqueiros, ou seja, você pode usá-los a qualquer momento em seus projetos, seja na fase de desenvolvimento ou de manutenção você pode se deparar com um problema que já foi analisado e solucionado antes.

Resumo do DevMan

Neste artigo iremos refatorar uma aplicação desenvolvida no artigo “Design Patterns para o mundo real, Singleton, Factory e DAO” (veja sessão Links), onde aplicaremos os patterns Template Method para criar classes base com um esqueleto de um algoritmo, Abstract Factory para criação de fábricas de famílias de objetos e também o Adapter para que possamos abstrair de nossa aplicação detalhes específicos de acesso a dados (nesse caso, dbExpress e ADO). Sugiro a leitura do artigo citado para um melhor entendimento e aproveitamento deste exemplo.

Os design patterns são padrões de design de soluções de software que já foram usados e aprovados para solucionar problemas comuns do desenvolvimento de software. Os patterns mais famosos são os que foram catalogados no famoso livro conhecido como GOF, apesar de esta literatura conter a descrição de 23 patterns, não significa que os design patterns se limitam a este grupo.

O uso destes patterns, tanto os descritos no GOF quanto outros, contribui para o aumento da qualidade do nosso software, permitindo um menor grau de acoplamento, um maior reuso de código devido ao nível de abstração aplicado, uma maior coesão das classes e uma melhor legibilidade do código.

Os design patterns são independentes de plataforma e tecnologia, sendo possível aplicá-los em qualquer linguagem orientada a objetos. O conhecimento de orientação a objetos, por sinal, é algo imprescindível para a compreensão dos patterns. No artigo citado anteriormente, nós construímos uma aplicação usando os patterns Singleton, Factory e DAO. Neste artigo a dinâmica será a mesma. Primeiramente nós explicaremos os patterns que usaremos e depois falaremos sobre as alterações realizadas na aplicação anterior, com a implementação dos patterns pertinentes a cada tipo de problema.

Neste artigo usaremos o Template Method para permitir que determinadas partes de um algoritmo definido na classe base sejam implementados em classes filhas, usaremos o Abstract Factory para criamos fábricas de famílias de objetos, além de usarmos o Adapter para que possamos abstrair a camada de acesso a dados de forma que não seja traumática uma possível mudança no futuro.

Nota: No endereço para download deste artigo você pode encontrar o código-fonte da primeira versão do aplicativo, o que ajudará a compreender as adaptações, refatorações e aplicação dos patterns vistos neste artigo.

Template Method

O Template Method é um pattern comportamental que permite a definição do esqueleto de um algoritmo em uma classe base, porém com a definição de métodos abstratos que serão implementados nas classes filhas, permitindo que reutilizemos as partes em comum deste algoritmo e que reescrevamos apenas as partes diferentes para cada classe filha.

Para aplicarmos este pattern temos pelo menos duas classes envolvidas. A classe base (abstrata) e a classe filha (concreta). A primeira possui o método que define o esqueleto do algoritmo a ser executado e a segunda possui a implementação dos “pedaços” que faltam para a execução do método definido na classe pai.

Como podemos ver na Figura 1, temos aclasse base com os métodos executaAcao, operacao1 e operacao2, onde executaAcao é o template method, é ele que define o algoritmo a ser executado. Na implementação do executaAcao teremos a chamada aos métodos acao1 e acao2 sendo que estes são abstratos e serão implementados nas classes concretas.

...
Quer ler esse conteúdo completo? Tenha acesso completo