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

Mapeamento Objeto Relacional em PHP com Outlet ORM

Jul 05, 2015

Download

Technology

Fábio Rehm
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Mapeamento Objeto Relacional em PHP com Outlet ORM

MAPEAMENTO OBJETO-RELACIONAL EM PHP COM OUTLET ORM

Fábio Rehm

Page 2: Mapeamento Objeto Relacional em PHP com Outlet ORM

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)

Page 3: Mapeamento Objeto Relacional em PHP com Outlet ORM

Diferenças

Relacional OO

Page 4: Mapeamento Objeto Relacional em PHP com Outlet ORM

Diferenças

Relacional OO

Page 5: Mapeamento Objeto Relacional em PHP com Outlet ORM

Diferenças

Relacional OO

Page 6: Mapeamento Objeto Relacional em PHP com Outlet ORM

Diferenças

Relacional OO

Page 7: Mapeamento Objeto Relacional em PHP com Outlet ORM

Diferenças

Relacional OO

?

Page 8: Mapeamento Objeto Relacional em PHP com Outlet ORM

Diferenças

Relacional OO

?

Page 9: Mapeamento Objeto Relacional em PHP com Outlet ORM

Diferenças

Relacional OO

?

Page 10: Mapeamento Objeto Relacional em PHP com Outlet ORM

Antigamente...

Page 11: Mapeamento Objeto Relacional em PHP com Outlet ORM

... era trabalhoso ...

Baixa produtividade

X inúmerastabelas e operações

Page 12: Mapeamento Objeto Relacional em PHP com Outlet ORM

... difícil de manter ...

Duplicidade de código

X inúmerastabelas e operações

Page 13: Mapeamento Objeto Relacional em PHP com Outlet ORM

... e difícil de modificar

Inviável substituir MySQL por outro banco

Page 14: Mapeamento Objeto Relacional em PHP com Outlet ORM

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)

Page 15: Mapeamento Objeto Relacional em PHP com Outlet ORM

Como funciona um ORM?

De forma simplificada:

Classes são mapeadas em tabelas

Instâncias (objetos) são (automaticamente) mapeadas em registros

Page 16: Mapeamento Objeto Relacional em PHP com Outlet ORM

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

Page 17: Mapeamento Objeto Relacional em PHP com Outlet ORM

Row Data Gatewayhttp://martinfowler.com/eaaCatalog/rowDataGateway.html

Classe para manipular uma linha da tabela

Implementa apenas inserções e atualizações

Page 18: Mapeamento Objeto Relacional em PHP com Outlet ORM

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

Page 19: Mapeamento Objeto Relacional em PHP com Outlet ORM

Data Mapperhttp://martinfowler.com/eaaCatalog/dataMapper.html

Persiste o modelo de objetos

Mapeamento externo a classe

Page 20: Mapeamento Objeto Relacional em PHP com Outlet ORM

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

Page 21: Mapeamento Objeto Relacional em PHP com Outlet ORM

simplicidade

10 arquivos

+- 50 kb

Page 22: Mapeamento Objeto Relacional em PHP com Outlet ORM

liberdade

ou

Page 23: Mapeamento Objeto Relacional em PHP com Outlet ORM

Requisitos

PHP 5.1.6+

Suporte a PDO para o banco de dados desejado

PHP 5.2+ para suporte a objetos DateTime

Page 24: Mapeamento Objeto Relacional em PHP com Outlet ORM

Instalação

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

2. Descompactar

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

Page 25: Mapeamento Objeto Relacional em PHP com Outlet ORM

Exemplo

Page 26: Mapeamento Objeto Relacional em PHP com Outlet ORM

Exemplo

Page 27: Mapeamento Objeto Relacional em PHP com Outlet ORM

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

Page 28: Mapeamento Objeto Relacional em PHP com Outlet ORM

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

Page 29: Mapeamento Objeto Relacional em PHP com Outlet ORM

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

Page 30: Mapeamento Objeto Relacional em PHP com Outlet ORM

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

Page 31: Mapeamento Objeto Relacional em PHP com Outlet ORM

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

Page 32: Mapeamento Objeto Relacional em PHP com Outlet ORM

Relacionamentos

definição

definição

chave estrangeira

Page 33: Mapeamento Objeto Relacional em PHP com Outlet ORM

Relacionamentos

Page 34: Mapeamento Objeto Relacional em PHP com Outlet ORM

CRUD

Page 35: Mapeamento Objeto Relacional em PHP com Outlet ORM

CRUD

Page 36: Mapeamento Objeto Relacional em PHP com Outlet ORM

( 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

Page 37: Mapeamento Objeto Relacional em PHP com Outlet ORM

CRUD

Page 38: Mapeamento Objeto Relacional em PHP com Outlet ORM

CRUD

Page 39: Mapeamento Objeto Relacional em PHP com Outlet ORM

CRUD - relacionamentos

Page 40: Mapeamento Objeto Relacional em PHP com Outlet ORM

Lazy loading

Page 41: Mapeamento Objeto Relacional em PHP com Outlet ORM

Fluent interface + Eager fetching

Page 42: Mapeamento Objeto Relacional em PHP com Outlet ORM

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á)

Page 43: Mapeamento Objeto Relacional em PHP com Outlet ORM

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

Page 44: Mapeamento Objeto Relacional em PHP com Outlet ORM

Unidade de trabalho

Page 45: Mapeamento Objeto Relacional em PHP com Outlet ORM

Plugin para Eclipse

Page 46: Mapeamento Objeto Relacional em PHP com Outlet ORM

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

Page 47: Mapeamento Objeto Relacional em PHP com Outlet ORM

Dúvidas?

Page 48: Mapeamento Objeto Relacional em PHP com Outlet ORM

Obrigado!Fábio Rehm

[email protected]

@fgrehm (twitter)