Software Design Patterns & AntiPatterns Helder Sousa Engineering Manager EAI&DB Engineering Area
Design patterns: Definição Um Design Pattern é uma solução estável para um problema comum num determinado contexto.
Design patterns: Definição de AntiPattern AntiPattern é uma má solução para um problema comum num determinado contexto Um bom AntiPattern também deve indicar o porquê da má solução ser atractiva, e qual o Pattern que se deve aplicar.
Design patterns: Benefícios Abstracto qb para aplicar a várias tecnologias. Específico qb para permitir colocar as “mãos na massa”. Fornecem um vocabulário comum entre software developers. São soluções comprovadas. Potenciam a reutilização.
Design Patterns: Template Contexto Problema Forças Solução Consequências Implementação Patterns relacionados
Design patterns: Common patterns Business delegate, Service locator, Session façade, Data Access Object
Design patterns: Service locator O Service Locator centraliza as operações de pesquisa de um serviço (lookup), fornece um acesso central a pode ainda conter uma cache eliminando o peso de novas pesquisas.
Design patterns: Façade Fornece um interface comum para um conjunto de interface de um subsistema. Define um interface de alto nível que torna o subsistema mais simples de utilizar.
Design patterns: Façade
Design patterns: Factory O Factory Pattern devolve instâncias parametrizadas de classes, mediante configurações de sistema, parâmetros ou estado do sistema.
Design patterns: DAO (Data Access Object) Data Access Object (ou DAO) pattern: Encapsula o acesso a dados. Adapta uma API específica de acesso a dados, a um interface cliente genérico.
Design patterns: DAO (Data Access Object) Exemplo de um DAO:
Design patterns: DAO (Pluggable & External SQL)
Design patterns: Decorator Attach additional responsibilities to an object dynamically. Flexible alternative to subclassing for extending functionality.
Design patterns: MVC (Model, View, Controller) Uma aplicação apresenta dados, processados por regras de negócio em múltiplos écrans. A equipe de engenharia responsável pelo desenho, implementação de manutenção é multidisciplinar. Input --> Processing --> Output Controller --> Model --> View
Anti-patterns: Shoot The Messenger Problema: Ninguém gosta de ouvir más notícias. Contexto: Alguém descobre um problema e avisa. Forças: Pressão Falta de controlo da situação Não é visível solução imediata para o novo problema Solução: Gritar com o mensageiro do problema Resultado: Cada vez os problemas são identificados mais tarde, e portanto com mais custos para o desenvolvimento do projecto. Solução proposta: Envolver o mensageiro na procura da solução. (see: http://c2.com/cgi/wiki?ShootTheMessenger)
Design patterns: Fontes de informação Patterns for beginners: http://c2.com/cgi-bin/wiki?PatternsForBeginners Enterprise integration patterns http://www.eaipatterns.com/eaipatterns.html Hillside patterns library http://hillside.net/patterns/ Java Blueprints Patterns http://java.sun.com/blueprints/patterns/index.html The Server Side patterns library http://www.theserverside.com/patterns/index.tss Parry's Patterns Page http://www.castle-cadenza.demon.co.uk/pattern.htm AntiPatterns Catalog http://c2.com/cgi/wiki?AntiPatternsCatalog
Design patterns: Fontes de informação Muito bem aceite Conhecido como “GangOfFour” Um “must” !!
Design patterns: Final statement Keep them in mind !! Abuse of them !!!!!