Padrão de Projeto - Projetos

Propaganda
UNIVERSIDADE FEDERAL DE SANTA CATARINA - UFSC
CURSO DE SISTEMAS DE INFORMAÇÃO
DISCIPLINA: Projetos I
ALUNA: Renata Espíndola Martins 0023837-6
PROF.: Renato Cislaghi
Padrão de Projeto: DAO – Data Access Object
Introdução
Muitas aplicações Java, em algum momento precisam persistir seus dados. Para uma mesma aplicação, o
mecanismo de persistência pode ser implementado de diferentes formas e pode existir grande diferença no modo como
esses mecanismos de persistência são acessados. Existem aplicações que até mesmo acessam dados de bases totalmente
distintas fisicamente. Por exemplo: partes dos dados podem residir em um mainframe e parte dos dados em um banco
de dados mais moderno, como o Oracle.
Problemas
Tipicamente as aplicações utilizam componentes compartilhados como beans de entidades que representam os
dados que são armazenados. Uma aplicação pode ser classificada como: persistência gerenciada por beans (BMP –
Bean Managed Persistence ) se os beans de entidade possuírem o código de acesso à camada de persistência. Uma outra
aplicação muito mais simples pode utilizar beans de sessão ou servlets para acessar diretamente a camada de
persistência e manipular os dados. Ou finalmente a aplicação pode utilizar persistência gerenciada pelo container ( CMP
– Container Managed Persistence ), que utiliza beans de entidade, onde o código que acessa a camada de persistência e
manipula os dados é gerenciado pelo container ( Servidor de aplicações ).
Aplicações podem utilizar a interface JDBC para acessar dados em bancos de dados relacionais. A interface
JDBC permite acesso padrão à manipulação dos dados em bancos relacionais.Ela permite a utilização de consultas em
SQL, que é o padrão de acesso às tabelas em bancos relacionais. Entretanto, mesmo entre os ambientes relacionais,
podem existir diferentes sintaxes e formatos de consultas SQL, esta diferença pode existir pois depende do banco de
dados utilizado.
Ainda pode haver uma outra grande diferença entre os diferentes tipos de persistência de dados. Diferença no
mecanismo de acesso, nas interfaces, e as funcionalidades que variam entre os diferentes tipos de persistência, como
bancos relacionais, orientados a objeto, arquivos de dados, mainframes. Aplicações que precisem acessar dados em
sistemas legados, no caso os mainframes, pode eventualmente ter que acessar interfaces proprietárias. Todas estas
diferenças podem ser um desafia para o desenvolvimento da aplicação,uma vez que podem potencialmente criar
dependências entre a codificação da aplicação, e o tipo de banco de dados utilizado, o que não seria interessante.
Quando objetos de negócio, como beans de entidade e beans de sessão precisam acessar os dados, e utilizam a interface
proprietária do sistema de persistência, cria se um forte acoplamento entre os objetos de negócio e o tipo do banco de
dados utilizado. Tal dependência torna difícil e tedioso a migração para um novo tipo de base de dados, ou até mesmo
para uma atualização do sistema. Se o sistema de persistência mudar, todas as entidades da aplicação devem ser
reescritas para funcionar com o novo mecanismo de persistência.
Resumo
o
o
o
o
o
Componentes como beans de entidade, beans de negócio e servlets precisam acessar a camada de persistência e
manipular dados.
A interface de diferentes mecanismos de persistência pode variar muito dependendo do fabricante.
Tipicamente se utiliza interface proprietária para acessar sistemas legados em mainframes.
A portabilidade dos componentes é diretamente afetada quando os objetos de negócio possuem a codificação
de determinado mecanismo de persistência.
Para os componentes de negócio, a camada de persistência precisa ser transparente, para que a migração da
base de dados, ou o sistema de persistência seja simples, para os mais variados tipos de fabricantes e
mecanismos de persistência.
Solução
Utilizar o Data Access Object (DAO – Objeto de Acesso aos Dados) para abstrair e encapsular todo o acesso à fonte
de dados. O DAO gerencia a conexão com a fonte de dados e como obter e armazenar os dados.
O DAO implementa o mecanismo que trabalha com a fonte de dados. A fonte de dados pode ser um mecanismo de
persistência relacional, orientado a objetos ou mainframe. O componente de negócio utiliza a interface mais simples
disponibilizada pelo DAO. O DAO esconde a complexidade da implementação da fonte de dados dos clientes que o
acessam. Como a interface que é exposta aos clientes não é afetada quando a fonte de dados ou o mecanismo de
persistência é trocado, então este padrão permite que diferentes bancos de dados e mecanismos de persistência sejam
utilizados sem que comprometam a aplicação. Resumidamente o DAO atua como se fosse um adaptador entre os
componentes de negócio da aplicação e o mecanismo de persistência utilizado, seja lá qual for.
Estrutura
Business Object – Componentes de negócio.
Data Access Object (DAO) – Adaptador entre os componentes
Data Source – Fonte de dados
Value Object – Dados
Conclusões
o
o
o
o
Provê transparência: Os componentes de persistência acessam a fonte de dados, sem conhecer detalhes
específicos da implementação do fabricante. O acesso é transparente pois os detalhes de acesso estão
escondidos dentro do DAO.
Facilitam a migração: Para uma aplicação que utilize DAO’s fica mais fácil a migração pois a aplicação não
tem conhecimento sobre os detalhes da implementação do mecanismo de persistência, além do que a migração
necessitará somente que o DAO seja modificado internamente, e para os componentes de negócio que acessam
as interfaces simples do DAO, nada será modificado.
Reduz a complexidade de código, dentro dos componentes de negócio: Uma vez que o DAO manipula toda
a complexidade de acesso e armazenamento de dados, os componentes de negócio podem focar apenas na
implementação das regras de negócio em si. Toda a parte relacionada ao acesso às tabelas, consultas SQL
estará dentro da codificação do DAO.
Centraliza todo o gerenciamento de dados em apenas uma camada: Como todo o acesso aos dados serão
implementados pelo DAO, as camadas de negócio e camada cliente/web podem ser isoladas do resto da
aplicação e podem ficar inclusive em outros servidores de aplicação. Esta centralização de tarefas torna mais
fácil a manutenção posterior à aplicação.
Bibliografia
[1]
Core J2EE Patterns - Data Access Object http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html
[2]
Advanced DAO programming, http://www-106.ibm.com/developerworks/java/library/j-dao/
Download