-
Mapeamento Objeto-Relacional:
Leonardo Eloyhttp://leonardoeloy.comDezembro/2009
Mapeamento Objeto-Relacional:Conceito e Implementao
-
JavaCEComunidade Java
http://javace.orghttp://javace.org
-
Agenda
(1) Conceito
(2) Implementao
(3) Problemas
-
ConceitoIntroduo
Object-Relational MappingObject-Relational Mapping
ou somente:
O/RM
OR/M
O/R Mapping
ORM
-
ConceitoObject-Relational Mapping
Tcnica de converso de Tcnica de converso de tipos de dados entre doissistemas incompatveis
-
Conceito
-
ConceitoBanco de Dados vs. Orientao a Objetos
declarativo imperativodeclarativo imperativo
string varchar
? schema
ponteiros junes
-
ConceitoBanco de Dados vs. Orientao a Objetos
encapsulado pblicoencapsulado pblico
validao restries
? herana
DBA desenvolvedor
-
ConceitoBanco de Dados vs. Orientao a Objetos
Xestrutura
Xestrutura
comportamento
-
ConceitoBanco de Dados vs. Orientao a Objetos
BDs gerenciam dadosObjetos modelam comportamentos
-
ConceitoProblemas no Mapeamento
identidade
sequences
identidadeobjetoA == objetoB;
objetoA.equals(objetoB);
idntico
igual
-
ConceitoProblemas no Mapeamento
herana
?
herana
-
ConceitoProblemas no Mapeamento
associao
FKs
associao1-11-n
n-nn-n
-
ConceitoVantagens de Utilizar ORM
produtividade
-
ConceitoVantagens de Utilizar ORM
manutenibilidade
-
ConceitoVantagens de Utilizar ORM
performance
-
ConceitoVantagens de Utilizar ORM
abstrao
-
ConceitoDesvantagens de Utilizar ORM
abstrao
-
ConceitoDesvantagens de Utilizar ORM
performance
-
ConceitoDesvantagens de Utilizar ORM
manutenibilidade
-
ConceitoDesvantagens de Utilizar ORM
produtividade
-
ConceitoTipos de Dados
Fato: qualquer tcnica de Fato: qualquer tcnica de Fato: qualquer tcnica de mapeamento de tipos de dados ser ineficaz em todos os casos
Fato: qualquer tcnica de mapeamento de tipos de dados ser ineficaz em todos os casos
-
ConceitoQuando Usar?
Schema normalizado
-
ConceitoQuando Usar?
Tem PKsTem PKs
-
ConceitoQuando Usar?
Tem FKs que referenciam PKs, no colunas
-
ConceitoTipos de Dados
Fato: qualquer tcnica de mapeamento ser ineficaz em
todos os casos
Fato: qualquer tcnica de mapeamento ser ineficaz em
todos os casos
-
Agenda
(2) Implementao
(1) Conceito
(3) Problemas
-
ImplementaoORM na Prtica
padres-basepadres-base
-
ImplementaoORM na Prtica Gateway
- objeto que encapsula o acesso externo a um sistema ou recurso;
de APIs,
- objeto que encapsula o acesso externo a um sistema ou recurso;
- gateways provm a funcionalidade de conter o cdigo especializado para chamada
de APIs, enquanto objetos utilizam chamadas simplificadas ao gateway.de APIs, de APIs, enquanto objetos utilizam chamadas simplificadas ao gateway.
Patterns of Enterprise Application Design, Martin Fowler
-
ImplementaoORM na Prtica Mapper
- um objeto que permite a comunicao entre dois objetos independentes;- um objeto que permite a comunicao entre dois objetos independentes;
- comunicao de dois objetos ignorantes entre si;
- no cria dependncias entre objetos.- no cria dependncias entre objetos.
Patterns of Enterprise Application Design, Martin Fowler
-
ImplementaoORM na Prtica
padres de fonte padres de fonte padres de fonte de dados
-
ImplementaoORM na Prtica Table Data GatewayTable Data Gateway
- um objeto atua como Gateway para o banco de dados;- um objeto atua como Gateway para o banco de dados;
- uma instncia tem todas as tuplas da tabela;
- funcionalidade bsicas de CRUD;
Patterns of Enterprise Application Design, Martin Fowler
- funcionalidade bsicas de CRUD;
- relacionamento entre trabelas;
- geralmente, trabalha com arrays.
-
ImplementaoORM na Prtica Row Data GatewayRow Data Gateway
- um objeto atua como Gateway para um nico registro no banco;
-
-
- um objeto atua como Gateway para um nico registro no banco;
- uma instncia por tabela;
- trabalha somente com inseres e atualizaces.
Patterns of Enterprise Application Design, Martin Fowler
-- trabalha somente com inseres e atualizaces.
-
ImplementaoORM na Prtica Active RecordActive Record
- encapsula uma linha de uma tabela;
-
-
- encapsula uma linha de uma tabela;
- uma classe base Record prov os mtodos bsicos;
- possui lgica de domnio sobre os dados & acesso ao banco.
Patterns of Enterprise Application Design, Martin Fowler
-- possui lgica de domnio sobre os dados & acesso ao banco.
-
ImplementaoORM na Prtica Data MapperData Mapper
- camada de mapeamentos que move os dados entre objetos e o banco,
mantendo
-
- camada de mapeamentos que move os dados entre objetos e o banco,
mantendo-os independente entre si e o prprio mapeador;
- mapeamento externo classe;
Patterns of Enterprise Application Design, Martin Fowler
-
-
- mapeamento externo classe;
- persiste modelo de objetos.
-
ImplementaoComo funciona?
classes -> tabelasclasses -> tabelasclasses -> tabelas
instncias -> registrosinstncias -> registros
-
ImplementaoJDBC para Relacional
Evento
Nome Data # Participantes
-
ImplementaoJDBC para Relacional
Evento
Nome Data # Participantes
-
ImplementaoJDBC para Relacional
Evento Palestrante
Nome Data # Participantes
Nome Palestra Data
1 N
-
ImplementaoJDBC para Relacional
-
ImplementaoJDBC para Relacional
Grafo de Grafo de Grafo de insero
erro
-
ImplementaoJDBC para Relacional
O mesmoO mesmoO mesmoproblema para
outras operaes
-
ImplementaoFramework ORM
Soluo: Soluo: framework ORM?
-
ImplementaoFramework ORM: DAO vs. ORM
E o padro Data Access Object?E o padro Data Access Object?
-
ImplementaoFramework ORM: DAO vs. ORM
E o padro Data Access Object?E o padro Data Access Object?E o padro Data Access Object?
Simples
Separao de dados (DTO) e comportamento (DAO)
Arquiteturas distribudas: DTOs entre camadas, DAOs expostos como servios
-
ImplementaoFramework ORM: DAO vs. ORM
E o padro Data Access Object?E o padro Data Access Object?E o padro Data Access Object?
Sem necessidade de runtime so classes puras
Cdigo de alta performance, se o DAO utilizacapacidades do banco (joins, stored procedures)
-
ImplementaoFramework ORM: DAO vs. ORM
Porm, com os DAOsPorm, com os DAOsPorm, com os DAOs
Grande volume de cdigo para implementao
Necessita de conhecimento do esquema de bancopara ser implementado
-
ImplementaoFramework ORM: DAO vs. ORM
J com ORM:J com ORM:J com ORM:
Modelo de domnio j pode ser desenvolvido em Java
Cacheing, auditoria, AOP: teriam que ser implementados manualmente no banco
-
ImplementaoFramework ORM: DAO vs. ORM
Mas, mesmo com o ORM:Mas, mesmo com o ORM:Mas, mesmo com o ORM:
Dados e comportamento no esto separados
Faade necessrio para disponibilizao do serviopara uma arquitetura distribuda
Portabilidade entre fabricantes de ORM complicada
-
ImplementaoFramework ORM: DAO vs. ORM
Nem eu, nem vocNem eu, nem vocNem eu, nem voc
Uma camada DAO poderia ser exposta somente paraclientes remotos
Um faade DAO sobre o modelo de domnio ORM: benefcios do ORM em tempo de execuo e as
capacidades de distribuio dos DAOs.
-
ImplementaoRequisitos de Frameworks ORM
RequisitosRequisitosRequisitos
Transaes
ConcorrnciaControle de
Concorrncia
Cacheing: porunidade de
trabalho ou poraplicao
-
ImplementaoRequisitos de Frameworks ORM
RequisitosRequisitosRequisitos
Lazy Loading
Atualizaes/Remo-es em cascata
Suporte a consultas com uma API para
objetos
-
ImplementaoRequisitos de Frameworks ORM
RequisitosRequisitosRequisitos
DependnciasOrdenao de Dependncias
Suporte a Paginao
Suporte a funes
agregadas
e muito mais
-
Agenda
(3) Problemas
(1) Conceito
(2) Implementao
-
ProblemasProblemas Pertinentes
Gerao de SQL a principal fraqueza de frameworks ORM. Como superar isso?
-
ProblemasProblemas Pertinentes
ORM utilizado para trazer dados do banco para o objeto. Seu objetivo no esse.
-
ProblemasProblemas Pertinentes
O grande conceito por trs do ORM mapear construes relacionais em suas contrapartidas orientadas a objeto.
-
ProblemasProblemas Pertinentes
Todo o problema reside em mapear tipos de dados diferentes, porm...
-
ProblemasProblemas Pertinentes
E se ns mapearmos consultas?
-
ProblemasProblemas Pertinentes
Tabelas, views, tuplas... Estas so entidades privadas do Banco de Dados.
-
ProblemasProblemas Pertinentes
A consulta a forma que o banco utilizapara expor seus dados.
-
ProblemasProblemas em Aberto
Integrao ORM com a linguagem (como o LINQ);Tcnicas de cacheing mais eficazes;Tcnicas de cacheing mais eficazes; Reduo do trfego entre o framework e o banco de dados;Otimizao inline no framework;Alteraes no banco de dados para melhor sintoniacom o framework ORM;Distribuio e sincronizao de instncias no ORM.
-
Concluso (1)
ORMs so ferramentas poderosas, mas por utilizarem o conceito de mapeamento, possuem falhas de design, conceito de mapeamento, possuem falhas de design, no de implementao; Em grandes projetos, ORMs podem ser um problemase no bem empregados; Em pequenos projetos, ORM a melhor opo; Em grandes aplicaes, a utilizao dos ORMs podemestar associadas a outras tcnicas, como DAOs;
-
Concluso (2)
bom utilizar um ORM quando h a possibilidade de criao de um modelo de domnio em Java, do zero;criao de um modelo de domnio em Java, do zero;A utilizao deve ser avaliada a cada projeto e suasnecessidades de leitura e escrita de dados; Em geral, uma soluo como Spring + Hibernate muito bem sucedida em sistemas Web mediados.
-
Obrigado!
http://leonardoeloy.comhttp://leonardoeloy.com
http://javace.orghttp://javace.org