170 likes | 295 Vues
CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 4: PADRÕES FACTORY E DAO. Prof. Cesar Augusto Tacla http://www.dainf.ct.utfpr.edu.br/~ tacla UTFPR/Campus Curitiba. Antes de apresentar o DAO, veremos o padrão FACTORY frequentemente utilizado em conjunto com DAO.
E N D
CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 4: PADRÕES FACTORY E DAO Prof. Cesar AugustoTacla http://www.dainf.ct.utfpr.edu.br/~tacla UTFPR/Campus Curitiba
Antes de apresentar o DAO, veremos o padrão FACTORY frequentemente utilizado em conjunto com DAO. • Para entender o modelo DAO, faremos um breve introdução ao padrão. • Em seguida, implementaremos o modelo num programa simples de cadastro de clientes. • Tópicos relacionados: Camada do modelo do padrão MVC, bando de dados relacional
SIMPLE FACTORY /** * exemplo extraido do livro HeadFirst: Design Patterns * * Este exemplo eh para mostrar a motivacao de uso do padraoFactory. * O que acontece se quisermos suprimir uma pizza do cardapio ou adicionar * novas? Temos que mudar o codigo do metodo comandar. Se forem muitas * pizzas pode ficar desorganizado. O que acontece se houver varios pontos de instanciação * destas pizzas? Os ifs de criação devem ser replicados. • Exemplo motivador • Baixar o código Factory/ExemploFactory • Compilar e rodar • Observar os comentários na classe Pizzaria aqui reproduzidos:
SIMPLE FACTORY 2 if (tipo.equalsIgnoreCase("MARGUERITA")) { p = newPizzaMarguerita(); } elseif (tipo.equalsIgnoreCase("PORTUGUESA")) { p = newPizzaPortuguesa(); } • Solução: encapsular a criação das Pizzas em um objeto SimpleFactory (ou fábrica simples) que sabe como criar objetos da classe Pizza e de suas derivadas. • Baixar código Factory/ExemploFactory2 e observar onde foi parar o código abaixo! • Rascunhe um diagrama de classes para o código em questão. • Observe que somente a Fábrica conhece as Pizzas concretas
ABSTRACT FACTORY • Imagine a seguinte situação: • Você tem duas pizzarias, uma no Juvevê e outra no Centro • Os cardápios diferem nas pizzas oferecidas e no modo de preparação. Por exemplo: • No Juvevê, tem pizza Calabresa • No centro, Portuguesa é assada por menos tempo e não leva azeitonas. • O sistema de pedido de pizzas é centralizado, então estes diferentes cardápios e modos de preparação devem ser levados em conta. Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla
ABSTRACT FACTORY • O simple factory resolve o problema apenas para uma pizzaria, se fossemos utilizá-lo nas duas pizzarias teriamos que fazer duas fábricas: • new FabricaJuveve • new FabricaCentro • E novas Pizzas, PortuguesaJuveve e PortuguesaCentro • Mas ainda assim, não poderiamos criar pizzas com receitas diferentes para as duas pizzarias, dado que o método criarPizzadas Fábricas está atrelado às mesmas pizzas. SistemasDistribuídos/UTFPR Prof. Cesr Augusto Tacla
ABSTRACT FACTORY • Baixar o código Factory/ExemploFactory3 para ver com resolver os problemas com o padrão AbstractFactory • Acrescentar uma nova Pizzaria que faz uma Pizza exclusiva de Presunto • Rascunhar o diagrama de classes e comparar com o do SimpleFactory • Observar o método criarPizza Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla
ABSTRACT FACTORY: resumo • Intenção • Prover uma interface para criar famílias de objetos sem especificar suas classes concretas • Aplicação • Quando o sistema deve ser independente de como os produtos são criados, compostos e representados • O sistema deve ser configurado para trabalhar com diversas famílias de produtos • Vale a pena utilizá-lo mesmo quando há apenas uma fábrica concreta? Sim, por causa do desacoplamento entre a família de produtos e o seu uso Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla
ABSTRACT FACTORY: resumo • Participantes • AbstractFactory(Pizzaria) declara uma interface para criar produtos; os produtos são abstratos • ConcreteFactory (PizzariaCentro, PizzariaJuveve): implementa as operações para criar os produtos • AbstractProduct (Pizza): declara uma interface para os produtos • ConcreteProduct(Portuguesa, Marguerita): implementa a interface AbstractProduct e define produtos a serem criados pela fábrica concreta. Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla
PADRÃO DAO • DATA ACCESS OBJECT construir uma camada de acesso aos dados de forma a isolar a camada do modelo da camada de persistência. Baixo acoplamento. • A idéia é poder mudar o mecanismo de persistência a qualquer momento sem ter que modificar a camada do modelo. • Interessante para fazer nova distribuição de um sistema. Dois clientes diferentes de um sistema podem querer utilizar BDs diferentes • Outro benefício, é poder utilizar vários mecanismos de persistência (ex. LDAP, BD, XML, arquivos, sistemas legados) de forma organizada, i.e. sem “poluir” a camada do modelo
PADRÃO DAO • DAO abstrai e encapsula o acesso as fontes de dados. • DAO gerencia a conexão com a fonte e sabe como obter os dados. • Por exemplo, encapsular conexões com o(s) BD(s) e os statements SQL
PARTICIPANTES DAO UmaclasseDAO factory (fábrica simples) Interface DAO (produtoabstrato) Classequeimplementa a interface DAO (produtoconcreto) Data transfer objects (tambémchamados de value objects)
EXEMPLO INICIAL • DAO/ExemploDAO (no Repositório Java) • A aplicação permite cadastrar e excluir registros da tabela CLIENTE. Não há consistência dos campos. • A aplicação está preparada para gravar clientes no banco de dados JavaDB ou em arquivos texto (na verdade, esta última opção não está implementada).
EXEMPLO INICIAL CRIAR BASE DE DADOS ====================== 1. Clique na tabserviços 2. Clique direita em JavaDB > inicializar 3. Clique direita em JavaDB > criar BD 4. Nome do banco de dados: exemplodao_db Nome do usuario: APP Senha: APP Localização: deixar o local default 5. clicar direita na base recém criada > conectar 6. Para criar as tabelas, clicar direita na base recém criada > Executar comando... 7. Na tab Comando SQL i, copiar e colar o conteúdo do arquivo sqlcriacaotabela.txt 8. Clicar no ícone RODAR SQL 9. Para visualizar o conteúdo da tabela CLIENTE, clicar na BD para que mostre as TABELAS 10. Na tabela CLIENTE, clique direita > visualizar dados DAO/ExemploDAO (no Repositório Java) Para executar:
EXERCÍCIOS Implementar as operações consultar e alterar na aplicação (sol. DAO/ExemploDAO-ConsAlt) Implemente a operação inserir(Cliente) na classe TextDAO Modifique a GUI de forma que ela mostre uma lista com os nomes dos clientes cadastrados numa lista rolante.