Escolar Documentos
Profissional Documentos
Cultura Documentos
ArqCamadas PersistObjetos PDF
ArqCamadas PersistObjetos PDF
Arquitetura em Camadas e
Persistncia de Objetos
Prof. Ismael H F Santos
April 08
Ementa
Arquitetura de camadas de Software
Arquiteturas
em Camadas
Padres para Arquiteturas em camadas
Persistncia de Objetos
Persistncia
de objetos
Estratgias de Persistncia
April 05
FPSW-Java
Arquitetura
Em Camadas
April 05
Introduo
Em aplicaes OO de mdio e grande porte, diversos
Apresentao
Lgica da aplicao
Lgica do negcio
Persistncia de Objetos
Camada de Utilitrios:
Controle de Excees, Logging, comunicao, etc.
April 05
Arquitetura em camadas
Arquitetura em camadas
visa a criao de
aplicativos modulares, de
forma que a camada mais
alta se comunica com a
camada mais baixa e
assim por diante, fazendo
com que uma camada
seja dependente apenas
da camada imediatamente
abaixo.
April 05
Camada de Apresentao
Camada de Negcios
Classes de
utilidade e
classes
assistentes
Camada de Persistncia
Banco de
dados
Arquitetura em camadas
Camada de Apresentao: Lgica de interface do
Arquitetura em camadas
Banco de dados: O BD existe fora da
Arquitetura MVC
Surgiu nos anos 80 com a linguagem SmallTalk
Divide a aplicao em tres
partes fundamentais
April 05
FPSW-Java
April 05
Padres para
Arquiteturas
em Camadas
GUI
UC 1
Controller
POJO
UC 2
Controller
View
Helper
Apresentao
April 05
Controle
Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br
POJO
Negcio
10
UC
Controller
DAO
JDBC
View
Helper
Apresentao
April 05
Controle
Hibernate
POJO
Negcio
Persistncia
+ Dados
11
Comando
1
JSP
Front
Controller
POJO
DAO
Comando
2
POJO
Comando
3
POJO
View
Helper
Apresenta
April 05
o
Controle
JDBC
Hibernate
DAO
Negcio
Persistnci
12
a + Dados
FPSW-Java
April 05
Data Access
Object
13
Patterns
No existe uma definio exata para o que so
April 05
14
April 05
15
Pattern DAO
O padro Data Access Object , tambm conhecido
April 05
16
Pattern DAO
Dentro do DAO so realizadas as querys ou o acesso
17
Problema
Forma de acesso aos dados varia
consideravelmente dependendo da
fonte de dados usado
Banco de dados relacional
Arquivos (XML, CSV, texto,
formatos proprietrios)
LDAP
Persistncia de objetos depende de
integrao com fonte de dados (ex:
business objects)
Colocar cdigo de persistncia
(ex: JDBC) diretamente no cdigo
do objeto que o utiliza ou do
cliente amarra o cdigo
desnecessariamente forma de
implementao
Ex: difcil passar a persistir
objetos em XML, LDAP, etc.
April 05
18
Soluo
Data Access Object (DAO) oferece
19
UML
Client: objeto que requer acesso a dados: Business
20
Estratgias de Implementao
Custom DAO Strategy
Estratgia bsica. Oferece mtodos para criar, apagar,
atualizar e pesquisar dados em um banco.
Pode usar Transfer Object para trocar dados com
clientes
DAO Factory Method Strategy
Utiliza Factory Methods em uma classe para recuperar
todos os DAOs da aplicao
DAO Abstract Factory Strategy
Permite criar diversas implementaes de fbricas
diferentes que criam DAOs para diferentes fontes de
dados
April 05
21
Exemplo
April 05
22
DAO - interao
April 05
23
Interface CustomerDAO
public interface CustomerDAO {
public int insertCustomer(...);
public boolean deleteCustomer(...);
public Customer findCustomer(...);
public boolean updateCustomer(...);
public RowSet selectCustomersRS(...);
public Collection selectCustomersTO(...);
...
}
April 05
24
CloudscapeCustomerDAO impl
/* This class can contain all Cloudscape specific code and SQL
statements. The client is thus shielded from knowing these
implementation details */
import java.sql.*;
public class CloudscapeCustomerDAO implements CustomerDAO {
public CloudscapeCustomerDAO() { // initialization }
/* The following methods can use CloudscapeDAOFactory.
createConnection() to get a connection as required */
public int insertCustomer(...) {
/* Implement insert customer here. Return newly created customer
number or a -1 on error */
}
public boolean deleteCustomer(...) {
/* Implement delete customer here // Return true on success,
false on failure */
}
April 05
25
CloudscapeCustomerDAO impl
public Customer findCustomer(...) {
/* Implement find a customer here using supplied argument values as
search criteria. Return a Transfer Object if found, return null on error or
if not found */
}
public boolean updateCustomer(...) {
/* implement update record here using data from the customerData
Transfer Object Return true on success, false on failure or error */
}
public RowSet selectCustomersRS(...) {
/* implement search customers here using the supplied criteria.
Return a RowSet. */
}
public Collection selectCustomersTO(...) {
/* implement search customers here using the supplied criteria.
Alternatively,
implement to return a Collection of Transfer Objects. */
}
Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br
26
} April 05
Client Code
// Create the required DAO Factory and the DAO Object
DAOFactory cloudscapeFactory =
DAOFactory.getDAOFactory(DAOFactory.DAOCLOUDSCAPE);
CustomerDAO custDAO = cloudscapeFactory.getCustomerDAO();
// Create a new customer. Find a customer object. Get Transfer Object.
int newCustNo = custDAO.insertCustomer(...);
Customer cust = custDAO.findCustomer(...);
// modify the values in the Transfer Object. Update the customer object
cust.setAddress(...); cust.setEmail(...); custDAO.updateCustomer(cust);
// delete a customer object
custDAO.deleteCustomer(...);
// select all customers in the same city
Customer criteria=new Customer(); criteria.setCity("New York");
Collection customersList = custDAO.selectCustomersTO(criteria);
// returns collection of CustomerTOs. iterate through this collection to get
values. ...
April 05
27
CustomerTransferObject
import java.io.*;
public class Customer implements Serializable {
// member variables
int CustomerNumber;
String name;
String streetAddress;
String city;
...
// getter and setter methods...
...
}
April 05
28
April 05
29
April 05
30
Conseqncias DAO
Transparncia quanto fonte de dados
Facilita migrao para outras implementaes
Basta implementar um DAO com mesma interface
Centraliza todo acesso aos dados em camada separada
Qualquer componente pode usar os dados (servlets,
componentes de negocio, etc)
Camada adicional
Pode ter pequeno impacto na performance
Requer design de hierarquia de classes (Factory)
Exemplos de DAO
DAO para cada Business Object
DAO para servios arbitrrios
April 05
33
FPSW-Java
Persistncia
de Objetos
April 05
34
persistentes e transientes.
April 05
35
Estratgias de Persistncia
Em aplicaes OO, a persistncia permite que objetos
36
Estratgias de Persistncia
Vantagens do uso de uma camada de persistncia
separada:
Serializao
SGBD Orientado a Objetos
Frameworks MOR
Padres (Data Source Architectural Patterns): Active
Record, Row Data Gateway, Table Data Gateway, DAO,
Data Mapper
April 05
37
Uso de Serializao
LPs modernas possuem funcionalidade para descarregar
Prevailer (http://www.prevayler.org/wiki.jsp)
Bamboo.Prevalence-http://bbooprevalence.sourceforge.net
Vantagem:
desenvolvedor trabalha em memria principal.
Desvantagens:
Estado da aplicao deve ser gravado/restaurado todo de
uma vez em memria principal.
Mudana do esquema do modelo OO, acesso concorrente...
April 05
38
39
April 05
40
Estratgias de MOR
Relevncia atual do mapeamento de objetos para o
modelo relacional:
mundos.
na soluo do problema.
April 05
41
Descasamento de informaes
O descasamento de informaes (impedance mismatch)
FirstName
LastName
List< Order>
Order
OrderNr
fkPerson
OrderNr
List< >Itens
ItemDetail
ProductName
ProductName
fkOrderDetail
April 05
42
FPSW-Java
April 05
Mecanismos de
Persistncia
de Objetos
43
Componentes de um
Mecanismo de Persistncia
Mapeamento OO/Relacional (MOR) ou
Object-relational mapping
Linguagem de Consulta
API de acesso aos dados
April 05
44
Componentes de um
Mecanismo de Persistncia
Mapeamento OO/Relacional (MOR)
O mapeamento objeto relacional o procedimento de
automatizar a mapeamento dos objetos em tabelas de um
SGBD relacional.
Um modelo OO semanticamente mais rico do que um
modelo Relacional. Vrios modelos Relacionais so
possveis para um mesmo modelo OO
OO e Relacional so tecnologias conceitualmente
diferentes. Um bom Design OO pode no ser um bom
Modelo Relacional. Muitas vezes acabamos sacrificando o
modelo OO por um melhor modelo Relacional.
Objetivos de performance e confiabilidade podem levar a
mapeamentos degenerados, semelhantes a bancos
relacionais no normalizados.
April 05
45
Componentes de um
Mecanismo de Persistncia
Mapeamento OO/Relacional (MOR)
SQL a linguagem utilizada para interagir com o Banco de
Dados Relacional. Em java utilizamos a API JDBC para
execuo de comandos SQL. Embora essa implementao
seja eficaz, deixa a aplicao sensvel a erros e dificulta a
codificao de rotinas de testes.
Soluo ideal
Ter os conceitos de OO representados no modelo relacional.
Modelo OO independente da implementao Relacional
aproveitando assim o melhor de cada tecnologia.
MOR parece ser ento a melhor soluo para o problema !
April 05
46
April 05
47
April 05
48
Mapeamento OO-Relacional
Gerncia de cache.
Dirty Checking e Transitive Persistence
Outer Join Fetching
Estratgias bsicas de mapeamento de Herana
April 05
49
April 05
50
Componentes de um
Mecanismo de Persistncia
Linguagem de Consulta
Postergar gravaes at o final das transaes
Inserir/atualizar/deletar menos registros
Utilizar apenas as colunas afetadas
Fim dos problemas de nvel de isolamento de transaes
Lock otimista realizado pelo mecanismo de persistncia
Problema: quando realizar leituras
No acesso a uma propriedade do objeto?
Carga antecipada de objetos relacionados?
April 05
51
Componentes de um
Mecanismo de Persistncia
O grande avano dos bancos relacionais
April 05
52
OQL x SQL
SQL necessita de muitos joins:
select nome from produto p, venda v
where p.id = v.produto
OQL pode utilizar o grafo de objetos:
select v.produto.nome from venda v
OQL pode utilizar operadores de conjunto:
select v.cliente from vendas v, in v.produtos p
where sum(p.valor) > 10000
April 05
53
Componentes de um
Mecanismo de Persistncia
API de acesso
APIs transparentes:
April 05
54
Componentes de um
Mecanismo de Persistncia
API de acesso
Basicamente, inserem um objeto persistente no contexto
de uma transao e informam quando a transao
encerrada
Fornecem meios de recuperar objetos persistentes, mas
tambm possvel utilzar os mtodos getXXX dos
prprios objetos
Em geral no h mtodos explcitos para gravar, mas
pode haver um factory para criar instncias persistentes
Na prtica, o desenvolvedor usa mais a API das suas
classes do que do mecanismo de persistncia
April 05
55