53
Curso: Tecnologia em Análise e Desenvolvimento de Sistemas Disciplina: Arquitetura de Software Prof. Msc. Petrônio Candido Lima e Silva Dupla: Aline Ferreira e Aricelio de Souza Turma: 5º Periodo

Padrões de projeto - Martin Fowler - P of EAA

Embed Size (px)

DESCRIPTION

Descrição de nove tipos de padrões de projeto de Martin Fowler.

Citation preview

Page 1: Padrões de projeto - Martin Fowler - P of EAA

Curso: Tecnologia em Análise e Desenvolvimento de SistemasDisciplina: Arquitetura de SoftwareProf. Msc. Petrônio Candido Lima e SilvaDupla: Aline Ferreira e Aricelio de SouzaTurma: 5º Periodo

Page 2: Padrões de projeto - Martin Fowler - P of EAA

Catálogo de Design Patterns P of EAA – Martin Fowler

Introdução ao catálogo Pof EA.

. Lazy Load. . Service Layer.

. Separated Interface. . Referências.

. Value Object.

. Query Object.

. Repository.

. Identity Map.

. Unity of Work.

. Active Record.

Page 3: Padrões de projeto - Martin Fowler - P of EAA

Introdução ao CatálogoP of EAA

O livro Patterns of Enterprise Application Architecture começou a ser desenvolvido depois de Davi Rice e Martin Fowler terem dado palestras sobre arquitetura J2EE e refletido sobre como os conceitos que haviam aprendido foram cruciais para o desenvolvimento de seus projetos.

Page 4: Padrões de projeto - Martin Fowler - P of EAA

O livro tem o propósito de definir padrões de projeto para ajudar desenvolvedores, indepentente da plataforma que utilizam.

O livro é dividido em duas partes: 1ª parte: Tutorial sobre arquitetura de

aplicações corporativas. 2ª parte: Referência para cerca de 40

tipos de padrões de projeto. Para cada padrão é descrito como

funciona e quando usá-lo, com exemplos em Java, C# ou ambos.

Introdução

Page 5: Padrões de projeto - Martin Fowler - P of EAA

Lazy LoadLazy Load

Finalidade

O Lazy Load tem a finalidade de interromper o processo de carregamento de objetos que não serão usados.

Ele coloca um marcador na estrutura dos objetos de modo que se os dados forem necessários à aplicação serão carregados apenas quando forem usados.

Page 6: Padrões de projeto - Martin Fowler - P of EAA

Lazy Load

Como é implementado?

Inicialização Tardia (Lazy Inicialization). Proxy Virtual (Virtual Proxy). Armazenador de Valor (Value Holder). Fantasma (Ghost).

Page 7: Padrões de projeto - Martin Fowler - P of EAA

Lazy Load

Inicialização Tardia (Lazy Inicialization)

Abordagem mais simples. Consiste em verificar se um campo é nulo

antes de acessá-lo. Sendo nulo, ele calcula o valor do campo antes de retornar o mesmo.

Para que fucione, o campo a ser lido deve estar auto-encapsulado.

Page 8: Padrões de projeto - Martin Fowler - P of EAA

Lazy Load

Exemplo

Page 9: Padrões de projeto - Martin Fowler - P of EAA

Lazy Load

Proxy Virtual (Virtual Proxy)

É um objeto que parece com o objeto que deveria estar no campo, mas não contém nada.

Somente quando um dos seus métodos é chamado, ele carrega o objeto correto a partir do banco de dados.

Page 10: Padrões de projeto - Martin Fowler - P of EAA

Lazy Load

Exemplo

Page 11: Padrões de projeto - Martin Fowler - P of EAA

Lazy Load

Armazenador de Valor (Value Holder)

É um objeto que encapsula algum outro objeto.

Para obter o objeto subjacente, você solicita seu valor ao armazenador de valor.

Sua desvantagem é que a classe precisa saber que ele existe.

Page 12: Padrões de projeto - Martin Fowler - P of EAA

Lazy Load

Exemplo

Page 13: Padrões de projeto - Martin Fowler - P of EAA

Lazy Load

Page 14: Padrões de projeto - Martin Fowler - P of EAA

Lazy Load

Fantasma (Ghost) É o objeto real em um estado parcial. Ao ser

carregado do banco de dados, ele contém apenas seu ID.

Sempre que o acesso a um campo for solicitado, ele carrega seu estado completo.

Um fantasma é um objeto, onde cada campo é inicializado tardiamente.

O objeto é carregado de forma incompleta, porém com seu identificador (chave) e carrega seus dados no primeiro acesso a suas propriedades.

Page 15: Padrões de projeto - Martin Fowler - P of EAA

Lazy Load

Exemplo

Page 16: Padrões de projeto - Martin Fowler - P of EAA

Separated Interface

Define uma interface para desacoplar uma camada de outra. As vezes é preciso contradizer a regra de dependencia entre camadas, por exemplo, uma camada acessar outra sem passar pelas intermediarias ou uma camada não depender de outra.

Separated Interface

Page 17: Padrões de projeto - Martin Fowler - P of EAA

Para por exemplo, a camada de apresentação acessar a camada de pesistência diretamente, a apresentação passaria a depender da interface da camada de pesistência. Assim, mesmo que as classe da camada de pesistência mudem, se a interface não mudar, a apresentação não precisará mudar.

Separated Interface

Page 18: Padrões de projeto - Martin Fowler - P of EAA

Separated Interface

Exemplo

Page 19: Padrões de projeto - Martin Fowler - P of EAA

Separated Interface

Exemplo

Page 20: Padrões de projeto - Martin Fowler - P of EAA

Separated Interface

Exemplo

Page 21: Padrões de projeto - Martin Fowler - P of EAA

Value Object

Em diversas aplicações orientadas a objetos, muitos objetos possuem uma Identidade. Uma importante classe de domínio como a classe Cliente terá vários atributos. O valor desse atributos é que diferenciam diferentes objetos de sua classe. Portanto, um objeto com uma Identidade, PERSISTE, ou seja, ele existe durante toda aplicação.

Value Object

Page 22: Padrões de projeto - Martin Fowler - P of EAA

Value ObjectValue Object

Mas existem situações em que alguns objetos NÃO precisam ter uma Identidade, pois esses objetos representam apenas características singulares de outros objetos.Exemplos: Classe Dinheiro, Data, etc.Esses objetos não precisam de uma identidade, pois representam somente valores, ou seja, eles não precisam persistir durante toda a aplicação.

Page 23: Padrões de projeto - Martin Fowler - P of EAA
Page 24: Padrões de projeto - Martin Fowler - P of EAA
Page 25: Padrões de projeto - Martin Fowler - P of EAA

Query Object

Segundo FOWLER (2006), Query Object é uma especialização do padrão Interpreter que constroi frases de consulta SQL com base em uma estrutura de objetos.

O padrão propõe que se utilize um objeto para conter todos os parametros necessários a construir a consulta SQL.

Um objeto que representa uma consulta ao banco de dados.

Query Object

Page 26: Padrões de projeto - Martin Fowler - P of EAA

Query Object

Page 27: Padrões de projeto - Martin Fowler - P of EAA

Query Object

Page 28: Padrões de projeto - Martin Fowler - P of EAA
Page 29: Padrões de projeto - Martin Fowler - P of EAA
Page 30: Padrões de projeto - Martin Fowler - P of EAA

Identity Map

Segundo FOWLER (2006), esse padrão assegura que cada objeto seja carregado apenas uma vez, mantendo cada objeto carregado em um mapa. Assim, ele procura os objetos usando o mapa quando se referindo a eles.

Um identity map mantém um registro de todos os objetos que foram lidos do banco de dados em uma única transação de negócio.

Identity Map

Page 31: Padrões de projeto - Martin Fowler - P of EAA

Identity Map

Sempre que quiser um objeto, você verifica o Mapa de identidade antes para ver se já o tem, semelhante a um cache.

Identity Map explicito: É acessado com métodos distintos para cada tipo de objeto que é preciso.

Identity Map genérico: Usa um único método para todos os tipos de objetos.

Identity Map

Page 32: Padrões de projeto - Martin Fowler - P of EAA

Identity Map

Exemplo

Page 33: Padrões de projeto - Martin Fowler - P of EAA

Active Record

O padrão Active Record encapsula a lógica para se criar uma linha na tabela correspondente a respectiva classe.

Onde,cada objeto sabe como ler e gravar seus dados no banco de dados, não existe uma camada específica para realizar essa tarefa.

Active Record

Page 34: Padrões de projeto - Martin Fowler - P of EAA

Este tipo de estrutura é indicada para sistemas menores onde a lógica de dominio não é tão complexa, como inserções,exclusões etc..

A estrutura dos dados dos objetos do Active Record devem ser exatamente iguais com a estrutura dos dados no Banco de Dados, o que dificulta a manutenção em razão da dependência entre os mesmos.

Active Record

Page 35: Padrões de projeto - Martin Fowler - P of EAA

ExemploActive Record

Page 36: Padrões de projeto - Martin Fowler - P of EAA

ExemploActive Record

Page 37: Padrões de projeto - Martin Fowler - P of EAA

Active Record

Page 38: Padrões de projeto - Martin Fowler - P of EAA

Repository

O padrão Repository faz a mediação entre o domain model e as camadas de mapeamento de dados, agindo como uma coleção de objetos de domínio em memória FOWLER (2006).

Esta camada abstrai o acesso a camada de persistência, isolando a lógica de acesso aos dados de qualquer outra camada da aplicação.

Repository

Page 39: Padrões de projeto - Martin Fowler - P of EAA

Este padrão é indicado para o desenvolvimento de aplicações que possuem um grande número de classes e nescessitam de consultas mais pesadas, além de ajudar a minimizar as duplicações nas lógicas das consultas.

Repository

Page 40: Padrões de projeto - Martin Fowler - P of EAA

ExemploRepository

Page 41: Padrões de projeto - Martin Fowler - P of EAA
Page 42: Padrões de projeto - Martin Fowler - P of EAA

Unity of Work

Mantém uma lista de objetos afetados por uma transação de negócio e coordena a gravação das alterações e a desolução de problemas de concorrência FOWLER (2006).

Unity of Work

Page 43: Padrões de projeto - Martin Fowler - P of EAA

Unity of WorkUma Unit of work pode ser entendida como uma sessão ou objeto que mantém o registro de todas as atividades relacionadas ao banco de dados, realizadas durante uma transação de negócio, sendo também responsável pelo gerenciamento dos problemas de concorrência que podem ocorrer oriundos dessa transação.

Unity of Work

Page 44: Padrões de projeto - Martin Fowler - P of EAA

Unity of WorkÉ indicada para situações onde são necessários:

Efetuar logs. Tracing. Gerenciar as transações. Promover a testabilidade dos sistema, etc.

Unity of Work

Page 45: Padrões de projeto - Martin Fowler - P of EAA

ExemploUnity of Work

Page 46: Padrões de projeto - Martin Fowler - P of EAA

Unity of Work

Page 47: Padrões de projeto - Martin Fowler - P of EAA

Service LayerDefine os limites de uma aplicação com uma camada de serviços que estabelece um conjunto de operações disponíveis e coordena a resposta da aplicação em cada operação.

Uma Camada de Serviço define a fronteira de uma aplicação e seu conjunto de operações disponiveis, a partir da perspectiva das camadas de interface dos clientes.

Service layer

Page 48: Padrões de projeto - Martin Fowler - P of EAA

Service LayerEla encapsula a lógica de negócio da aplicação, controlando as transações e coordenando as respostas na implementação de suas operações.

Service layer

Page 49: Padrões de projeto - Martin Fowler - P of EAA

Service layer

Page 50: Padrões de projeto - Martin Fowler - P of EAA

Service layer

Page 51: Padrões de projeto - Martin Fowler - P of EAA
Page 52: Padrões de projeto - Martin Fowler - P of EAA

ReferênciasALMEIDA, Erico Renato Oliveira, Padrões de Projeto – Value

Object. 2007. Disponivel em: <http://imasters.com.br/artigo/7293/linguagens/padroes-de-projeto-value-object/>. Acesso em: 16 Mar 2014.

FOWLER, Martin. Padrões de Arquitetura de Aplicações Corporativas / Martin Fowler; tradução Acauan Fernandes. - Porto Alegre : Bookman, 2006.

PIRES, Glauber Magalhães. Lazy Loading – Inicialização Preguiçosa. Disponivel em: <http://www.glauberpires.com.br/arquitetura/4-Lazy%20Loading.pdf>. Acesso em: 16 Mar 2014.

RANIERI, Bárbara. Lazy Load – Quando usar?. 2013. Disponivel em: <http://www.princiweb.com.br/blog/programacao/aspnet/lazy-load-quando-usar.html>. Acesso em: 16 Mar 2014.

Referências

Page 53: Padrões de projeto - Martin Fowler - P of EAA

SANTOS, Jadson José. Análise da Utilização de padrões no Desenvolvimento de Software em Camadas. 2008. Disponivel em: <http://jadsonjs.files.wordpress.com/2008/03/artigo-padroes-de-projeto-padroes-basicos.pdf>. Acesso em: 16 Mar 2014.

TABORDA, Sérgio, Query Object. 2009. Disponivel em: <http://sergiotaborda.wordpress.com/desenvolvimento-de-software/java/patterns/query-object/>. Acesso em: 16 Mar 2014.

Referências