You are on page 1of 3

Introduo ao pattern DAO

Desde o incio da era da programao, viu-se a grande necessidade de haver um meio de armazenamento de dados. Um programa deveria saber gerenciar os dados e fazer processamentos inteligentes sobre eles, trazendo informaes oportunas aos usurios. Hoje as empresas usam grandes bancos de dados que manipulam milhes de informaes. No se pode conceber um sistema moderno sem acesso a algum tipo de base de dados. Dessa forma, os nossos programas devem saber se comunicar com a base de dados. Como fazer isso de maneira adequada? Uma alternativa muito vivel usar o pattern DAO. Iremos explor-lo um pouco neste artigo. DAO: o intermedirio entre os mundos XMLs, a grosso modo, so um conjunto de tags dispostas de modo hierrquico, contendo informaes estruturadas. Arquivos texto so um conjunto de caracteres. Bancos de dados relacionais so um conjunto de tabelas, colunas, e linhas. Aplicaes Java so um conjunto de objetos. O DAO deve funcionar como um tradutor dos mundos. Suponha um banco relacional. O DAO deve saber buscar os dados do banco e converter em objetos para ser usado pela aplicao. Semelhantemente, deve saber como pegar os objetos, converter em instrues SQL e mandar para o banco de dados. assim que um DAO trabalha. Abstrao Devido sua qualidade de tradutor, o DAO abstrai a origem e o modo de obteno / gravao dos dados, de modo que o restante do sistema manipula os dados de forma transparente, sem se preocupar com o que acontece por trs dos panos. Isso ajuda muito em processos de migraes de fonte de dados e testes unitrios. Unificao do acesso a dados muito comum em cdigos de programadores iniciantes vermos a base de dados sendo acessada em diversos pontos da aplicao, de maneira extremamente explcita e repetitiva. Isso um crime contra um bom design OO. Alm de no abstrair a fonte dos dados, transforma o cdigo em um espaguete difcil de manter. O DAO tambm nos ajuda a resolver este problema, provendo pontos unificados de acesso a dados. Desse modo, a? lgica? de interao com a base de dados ficam em lugares especficos e especializados nisso, alm de eliminar cdigos redundantes, facilitando a manuteno e futuras migraes. DAO na prtica Geralmente, temos um DAO para cada objeto do domnio do sistema (Produto, Cliente, Compra, etc.), ou ento para cada mdulo, ou conjunto de entidades fortemente relacionadas. Cada DAO deve possuir uma interface, que especifica os mtodos de manipulao de dados. Nossos cdigos trabalharo apenas com as interfaces dos DAOs, desconhecendo a implementao utilizada. Isso uma boa prtica, no somente em termos de persistncia, mas em vrios outros pontos de uma aplicao. Para exemplificar, vamos tratar dos usurios do nosso sistema. O primeiro passo definir uma classe User.

1. 2. 3. 4.

public class User { private String name, password; // Construtores e sets / gets omitidos }

Agora, especificaremos a interface UserDao:

1. 2. 3.

public interface UserDao { public void save (User user); public void delete (User user);

4. 5. 6. 7. 8.

public List list (); public User find (String name); }

Observe que UserDao no contem nenhuma informao especfica da origem dos dados. Agora, podemos codificar os nosso Daos, implementando esta interface.
1. 2. 3. 4. 5. 6. 7. class JDBCUserDao implements UserDao {...} class HibernateUserDao implements UserDao {...}

class TextFileUserDao implements UserDao {...}

Aqui exemplificamos trs implementaes possveis. Uma, usando ? JDBC puro ?; a segunda, usando o framework Hibernate e a ltima persistindo em arquivo texto. DAO + Factory ou DI (Dependency Injection) Apesar de termos a interface UserDao, no h nenhum proveito em criarmos nossos DAOs desta maneira:
1. UserDao dao = new HibernateUserDao();

Se fizermos de tal modo, de nada nos aproveitar, em termos de abstrao, usarmos uma interface para o DAO. O ideal que usemos o pattern Factory ou DI (Injeo de Dependncias) para mxima transparncia. Nesse artigo, usaremos o Factory. O pattern Factory implementa uma fbrica de objetos, abstraindo e isolando o modo de criao dos objetos. Veja um exemplo simples:

1. 2. 3. 4. 5.

public class Factory { public static UserDao createUserDao () { return new HibernateUserDao (); } }

Assim, o nico lugar em toda a aplicao que conhece a implementao de DAO usada aqui. Quando precisarmos do UserDao, ao invs de instanciar com um new, chamaremos a fbrica:
1. 2. 3. 4. 5. UserDao userDao = Factory.createUserDao ();

//... use a abuse do userDao

No entraremos em detalhes sobre a implementao destes patterns, visto que podero ser alvos de estudo em prximos artigos.

Patterns relacionados H outros patterns relacionados persistncia, como o ActiveRecord e o Repository.

You might also like