Translate

18 de setembro de 2009

Padrões de projeto - Design Pattern

Design Pattern é uma forma padrão de organizar classes e objetos, nomes para soluções que você já modelou, uma forma de compartilhar conhecimentos sobre POO, soluções de POO para problemas que incidem em diversos cenários de desenvolvimento, etc.
Quando adotamos o uso de Design Patterns seu código fica mais organizado, aumenta a qualidade, menor complexidade, aumenta a comunicação dentro da equipe de desenvolvimento, etc.
A definição de um pattern pode conter:
            O nome: identifica o padrão;
            O problema: explica o problema e o seu contexto;
          A solução: descreve a maneira de melhorar o desenvolvimento, relacionamentos, responsabilidades, colaborações, de maneira ser implementada em diferentes situações;
     • As consequências: os resultados de aplicarmos o padrão;

Família de Patterns GoF
GoF (Quatro criadores) é uma familia de Design Patters, são 23 padrões, veja alguns:
            Criação: Abstract Factory, Builder, Factory Method, Prototype, Singleton
            Estrutura: Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy
          Comportamento: Chain Of Response, Command Interpreter, Mediator, Memento, Observer, State, Strategy, Template Method, Visitor.

Familia de Patterns J2EE
            • J2EE: Busness Delegate, Composite Entity, Composite View, Data Access Object, Fast Lane Reader, Front Controller, Intercepting Filter, Model-View-Controller, Service Locater, Session Facade, Transfer Object, Value List Handler, View Helper
Você pode consultar o catalogo de Patterns do J2EE no endereço abaixo.

Patterns e Certificação
As seguintes certificações Sun exigem conhecimentos de Patterns:
            • Sun Certified Web Component Developer
            • Sun Certified Enterprise Architect;

Para quem pretende tirar uma destas certificações é necessário estudar todos os patterns, aplicar na prática os principais GoF e conhecer a teoria básica;
Alguns Patterns
Service Locator
            Definição: simplifica o acesso a recursos J2EE em um aplicativo centralizando lookups com JNDI em classes específicas de localização de serviços.
            • Evita que sua solução tenha alto acoplamento com JNDI Naming Service;
            • Tomar cuidado com Service Locates e cluster!
            • Utilize sempre que possível ENC.
            • Exemplo no JAREF(J2EE Architecture, Research and Education Framework);

Data Access Object
            Definição: centraliza o serviço de persistência de objetos em um pequeno conjunto de classes, evitando por exemplo que o código SQL se espalhe pelo código da solução.
            • Mesmo utilizando framework de persistência, utilize Data Access Object
            • Exemplo no JAREF(J2EE Architecture, Research and Education Framework);

Model View Control
            Definição: divide o aplicativo em dados, comportamento e apresentação.
            • Aplicando o MVC podemos reaproveitar o mesmo dado para múltiplas visualizações;
            • Podemos reaproveitar o comportamento(eventos) da solução;
            • É um pattern de arquitetura, criado há muito tempo. Pode ser aplicado em qualquer linguagem, mais facilmente com OOP.
            • Struts, WebWork, Spring, PicoContainer são exemplos de frameworks J2EE.
            • Link comparativo de frameworks MVC: https://equinox.dev.java.net/framework-comparison/WebFrameworks.pdf

Front Controller
            Definição: centraliza requests em um ponto central na solução.
            • No lugar de um JSP submit para ouro JSP todos os JSP’s “subments” para um Servlet Controller que será responsável por processar as requisições.
            • Exemplo no JAREF(J2EE Architecture, Research and Education Framework);

Command / Action
            Definição: encapsula uma requisição ao software em um objeto.
            • Transforma métodos em classes
            • Facilita o desenvolvimento de undo/redo
            • Aumenta a granularidade do código, permitindo o reuso
            • Action do Struts é o principal exemplo de implementação deste pattern

Factory
            Definição: instancia classes conforme demanda, recebendo parâmetros indicativos do objeto a ser instanciado.
            • É comum o Controller “inchar”, pois nele incide todas as solicitações externas. Como uma maneira de resolver esse tipo de crescimento desordenado, é sugerido que o Command seja criado sob demanda, e deixa por conta de uma Factory a instanciação das classes Command necessárias.

Dispatcher to views
            Definição: gerencia a saída de informações para a interface desejada pelo cliente. Desatrela a forma de se enxergar os dados para múltiplas visões.
            • É uma maneira de se implementar M. V. C. na sua essência, como o Smalltalk pregava.

Intercepting Filter
            Definição: forma para executar pré e pós processamento em request da solução.
            • Um Servlet Filter é um exemplo de implementação de um Intercepting Filter para interceptar requests no Web Container;

View Helper
            Definição: simplifica a “redenrização” de objetivos em views com formatação.
            • Uma Custom Tag pode representar uma View Helper;
            • Uma simples classe convencional com métodos estáticos também;
            • Exemplo no JAREF(J2EE Architecture, Research and Education Framework);

Business Delegate
            Definição: em aplicações distribuídas, o acesso remoto/local a EJB’s via JNDI Naming Service e tratamento de erros podem se tornar complexo à medida que o projeto cresce.
            Solução: criar uma classe intermediaria para acessar os EJB’s que contempla as regras de nomes de componentes para lookups, propriedades do servidor J2EE, tratamento de exceptions, etc;
Conclusão
            • Os patterns (padrões) previnem erros comuns evitando problemas recorrentes;
        • Utilizando patterns você cria soluções padronizadas, facilitando a troca de programadores;
            • Você pode criar seus próprios patterns;

Nenhum comentário :

Postar um comentário