mapeamento objeto relacional em php com outlet orm

48
MAPEAMENTO OBJETO-RELACIONAL EM PHP COM OUTLET ORM Fábio Rehm

Upload: fabio-rehm

Post on 05-Jul-2015

5.362 views

Category:

Technology


4 download

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úmerastabelas e operações

... difícil de manter ...

Duplicidade de código

X inúmerastabelas 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 Gatewayhttp://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 Gatewayhttp://martinfowler.com/eaaCatalog/rowDataGateway.html

Classe para manipular uma linha da tabela

Implementa apenas inserções e atualizações

Active Recordhttp://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 Mapperhttp://martinfowler.com/eaaCatalog/dataMapper.html

Persiste o modelo de objetos

Mapeamento externo a classe

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)

http://www.outlet-orm.org

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

Instalação

1. Downloadhttp://www.outlet-orm.org/site/downloads

2. Descompactar

3. set_include_path(PASTA_DE_DESTINO.';' . get_include_path());(opcional)

Exemplo

Exemplo

Mapeamentohttp://www.outlet-orm.org/manual/ch04.html

Mapeamentohttp://www.outlet-orm.org/manual/ch04.html

Mapeamentohttp://www.outlet-orm.org/manual/ch04.html

Mapeamentohttp://www.outlet-orm.org/manual/ch04.html

Mapeamento em XMLhttp://groups.google.com.br/group/outlet-orm/files

Relacionamentos

definição

definição

chave estrangeira

Relacionamentos

CRUD

CRUD

( mapa de identidade)

Assegura que cada objeto seja carregado apenas uma única vez, mantendo cada objeto em um mapa.

http://martinfowler.com/eaaCatalog/identityMap.html

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

Mantém uma lista de objetos afetados poruma transação de negócio

Coordena a execução das ações (inserir, alterar, …)

http://martinfowler.com/eaaCatalog/identityMap.html

Unidade de trabalho

Plugin para Eclipse

Referências:

Patterns of Enterprise Application Architecture (Martin Fowler, 2003)

http://www.slideshare.net/alegomes/mapeamento-or-com-hibernate

http://www.slideshare.net/rob_knight/object-relational-mapping-in-php

Dúvidas?

Obrigado!Fábio Rehm

[email protected]

@fgrehm (twitter)