LabBD Isolando o BD com DAO

Propaganda
Laboratório de Banco de Dados
Aula 3
Isolando a Camada de Persistência
Prof. Josenildo Silva
[email protected]
Introdução
JDBC permite que se tenha acesso
a BD a partir de uma classe java
Introdução
JDBC permite que se tenha acesso
a BD a partir de uma classe java
Como você aprendeu no lab. 1
Introdução
Entretanto acrescenta complexidade e
possível redundância de código
espalhados por todo o projeto.
Introdução
Entretanto acrescenta complexidade e
possível redundância de código
espalhados por todo o projeto.
Como você percebeu no lab. 2
Introdução
Como resultado temos um
pesadelo de manutenção.
Introdução
Como resultado temos um
pesadelo de manutenção.
Imagine ter que mudar de
SGBD, com código do lab. 2
Introdução
Além disso, dados podem estar
armazenados em diversos formatos
e tecnologias
• SGBD: relacionais, BDOO, NoSQL
• Formatos: texto, XML, binário, etc.
• Fabricantes: oracle, postgres,
mysql, etc.
Introdução
Então, como manter o projeto
simples, sem redundância e fácil
manutenção quando se usa JDBC?
Padrão
Data Access Object cria uma camada
intermediária entre a camada de negócios e
os detalhes de armazenamento persistente
DAO
<<interface>>
ProdutoDAO
implementa
JDBCProdutoDAO
usa
Produto
DAO
public class Produto{
//getters e settes não mostrados ...
}
public interface ProdutoDAO{
public void salvar(Produto p);
public Produto ler(Integer id);
public List<Produto> lerTodos();
// ... outros métodos CRUD ...
}
public class JDBCProdutoDAO{
@override public void salvar(Produto p) { ... }
// ...
}
DAO
public class Teste{
public static void main(String args[]){
// ...
ProdutoDAO pdao = new JDBCProdutoDAO();
// ...
}
}
DAO
E quanto às outras entidades?
DAO
<<interface>>
ProdutoDAO
implementa
JDBCProdutoDAO
usa
Produto
DAO
<<interface>>
usa
<<interface>>
usa
ProdutoDAO
ClienteDAO
implementa
implementa
JDBCProdutoDAO
JDBCClienteDAO
Produto
Cliente
DAO
<<interface>>
usa
Produto
<<interface>>
usa
ProdutoDAO
Cliente
<<interface>>
usa
ClienteDAO
Pedido
PedidoDAO
implementa
implementa
JDBCProdutoDAO
JDBCClienteDAO
JDBCPedidoDAO
DAO |Extensões
E se existirem implementações
diferentes?
DAO |Extensões
<<interface>>
ProdutoDAO
implementa
JDBCProdutoDAO
usa
Produto
DAO |Extensões
<<interface>>
ProdutoDAO
usa
implementa
JDBCProdutoDAO
XMLProdutoDAO
Produto
DAO |Extensões
<<interface>>
ProdutoDAO
usa
implementa
JDBCProdutoDAO
XMLProdutoDAO
MongoProdutoDAO
Produto
DAO |Extensões
DAOFactory
usa
<<interface>> usa
ProdutoDAO
cria
implementa
JDBCProdutoDAO
XMLDAOFactory
MongoDAOFactory
JDBCProdutoDAO
XMLProdutoDAO
MongoProdutoDAO
Produto
DAO |Extensões
public class Teste{
public static void main(String args[]){
// ...
ProdutoDAO pdao = DAOFactory()... ;
// ...
}
}
DAO |Problemas
DAOs podem ficar com API muito
complexa e acoplada a detalhes da
entidade
Exemplo: consultas e atualizações
Alternativa
Muitos desenvolvedores estão
utilizando o padrão Repository no
lugar de, ou sobre, o DAO
Alternativas
JPA + frameworks tem sido a
escolha mais popular atualmente.
Alternativas
Versão atual 3.0
JPA + frameworks tem sido a
escolha mais popular atualmente.
Alternativas
Hibernate
OpenJPA
EclipseLink
TopLinks Essential
JPA + frameworks tem sido a
escolha mais popular atualmente.
Referências
• http://tutorials.jenkov.com/javapersistence/dao-design-problems.html
• http://blog.caelum.com.br/possibilidades-dedesign-no-uso-do-seu-generic-dao/
• http://thinkinginobjects.com/2012/08/26/dontuse-dao-use-repository/
• http://gc.blog.br/2009/01/17/sindrome-de-dao/
• http://manifesto.blog.br/2.0/Programacao/reposit
ory-pattern
• http://www.rponte.com.br/2009/06/08/no-moredaos/
Download