Mapeamento Objeto Relacional em PHP com Outlet ORM - Presentation Transcript
MAPEAMENTO OBJETO-RELACIONAL
EM PHP COM OUTLET ORM
Fábio Rehm
O que é ORM?
Mapeamento objeto-relacional (ou ORM)
é uma técnica utilizada para reduzir as
dificuldades de se programar orientado a
objetos utilizando bancos de dados
relacionais.
(Wikipédia)
Diferenças
Relacional OO
Diferenças
Relacional OO
Diferenças
Relacional OO
Diferenças
Relacional OO
Diferenças
Relacional OO
?
Diferenças
Relacional OO
?
Diferenças
Relacional OO
?
Antigamente...
... era trabalhoso ...
Baixa produtividade
X inúmeras
tabelas e
operações
... difícil de manter ...
Duplicidade de código
X inúmeras
tabelas e
operações
... e difícil de modificar
Inviável substituir MySQL por outro banco
Soluções
Banco de dados orientado a objetos
Nem sempre OO é a melhor forma de se
resolver um problema
Mapeamento objeto-relacional:
Table Data Gateway – Gateway de tabela
Row Data Gateway – Gateway de linha de dados
Active Record – Registro ativo
Data Mapper – Mapeador de dados
(Patterns of Enterprise Application Architecture, Martin Fowler)
Como funciona um ORM?
De forma simplificada:
Classes são mapeadas em tabelas
Instâncias (objetos) são (automaticamente)
mapeadas em registros
Table Data Gateway
http://martinfowler.com/eaaCatalog/tableDataGateway.html
Uma classe por tabela
Funções básicas de CRUD
Pode implementar o relacionamento entre as
tabelas
Normalmente trabalha com arrays
Row Data Gateway
http://martinfowler.com/eaaCatalog/rowDataGateway.html
Classe para manipular uma linha da tabela
Implementa apenas inserções e atualizações
Active Record
http://martinfowler.com/eaaCatalog/activeRecord.html
Semelhante ao Row Data Gateway
Classes devem herdar de uma classe Registro
que provê a funcionalidade básica
Mistura de código para acesso a dados e
lógica de domínio
Data Mapper
http://martinfowler.com/eaaCatalog/dataMapper.html
Persiste o modelo de objetos
Mapeamento externo a classe
http://www.outlet-orm.org
Pode ser visto como um conjunto de
mapeadores de dados e tem o funcionamento
semelhante ao (N)Hibernate
Criado por Alvaro Carrasco (EUA) em ~2007
Possui código aberto
Consulta a objetos parecida com SQL
Utiliza PDO “por baixo dos panos”
http://br.php.net/manual/en/intro.pdo.php
Banco de dados suportados:
MySQL, PostgreSQL, SQLite, MS SQL (parcial)
simplicidade
10 arquivos
+- 50 kb
liberdade
ou
Requisitos
PHP 5.1.6+
Suporte a PDO para o banco de dados
desejado
PHP 5.2+ para suporte a objetos DateTime
( mapa de identidade)
http://martinfowler.com/eaaCatalog/identityMap.html
Assegura que cada objeto seja carregado
apenas uma única vez, mantendo cada objeto
em um mapa.
CRUD
CRUD
CRUD - relacionamentos
Lazy loading
Fluent interface + Eager fetching
Futuro do projeto
0.7 (versão corrente)
1.0
Ao que tudo indica será apenas a correção de bugs que já
foram realizadas (svn/trunk) + suporte a múltiplas bases de
dados
2.0
Suporte a chaves primárias compostas
Unidade de trabalho
Criação automática de tabelas
…
Plugin para eclipse
Possível migração para Github (2.0 está indo para lá)
Unidade de trabalho
http://martinfowler.com/eaaCatalog/identityMap.html
Mantém uma lista de objetos afetados por
uma transação de negócio
Coordena a execução das ações (inserir,
alterar, …)
0 comments
Post a comment