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/