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 ...
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
            ...
... difícil de manter ...

 Duplicidade de código


                      X inúmeras
                        tabelas e
   ...
... 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 ...
Como funciona um ORM?

De forma simplificada:
 Classes são mapeadas em tabelas
 Instâncias (objetos) são (automaticament...
Table Data Gateway
     http://martinfowler.com/eaaCatalog/tableDataGateway.html




 Uma classe por tabela
 Funções bás...
Row Data Gateway
     http://martinfowler.com/eaaCatalog/rowDataGateway.html




 Classe para manipular uma linha da tabe...
Active Record
      http://martinfowler.com/eaaCatalog/activeRecord.html




 Semelhante ao Row Data Gateway
 Classes de...
Data Mapper
       http://martinfowler.com/eaaCatalog/dataMapper.html




 Persiste o modelo de objetos
 Mapeamento exte...
http://www.outlet-orm.org


 Pode ser visto como um conjunto de
    mapeadores de dados e tem o funcionamento
    semelha...
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.   Download
     http://www.outlet-orm.org/site/downloads
2.   Descompactar
3.   set_include_path(PASTA_DE_D...
Exemplo
Exemplo
Mapeamento
http://www.outlet-orm.org/manual/ch04.html
Mapeamento
http://www.outlet-orm.org/manual/ch04.html
Mapeamento
http://www.outlet-orm.org/manual/ch04.html
Mapeamento
http://www.outlet-orm.org/manual/ch04.html
Mapeamento em XML
http://groups.google.com.br/group/outlet-orm/files
Relacionamentos




              definição




              chave estrangeira



              definição
Relacionamentos
CRUD
CRUD
( mapa de identidade)
      http://martinfowler.com/eaaCatalog/identityMap.html




 Assegura que cada objeto seja carreg...
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 ...
Unidade de trabalho
       http://martinfowler.com/eaaCatalog/identityMap.html




 Mantém uma lista de objetos afetados ...
Unidade de trabalho
Plugin para Eclipse
Referências:

 Patterns of Enterprise Application Architecture (Martin
  Fowler, 2003)
 http://www.slideshare.net/alegom...
Dúvidas?
Obrigado!
    Fábio Rehm

 fgrehm@gmail.com
  @fgrehm (twitter)
Próximos SlideShares
Carregando em…5
×

Mapeamento Objeto Relacional em PHP com Outlet ORM

6.343 visualizações

Publicada em

Publicada em: Tecnologia
1 comentário
2 gostaram
Estatísticas
Notas
Sem downloads
Visualizações
Visualizações totais
6.343
No SlideShare
0
A partir de incorporações
0
Número de incorporações
40
Ações
Compartilhamentos
0
Downloads
118
Comentários
1
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Mapeamento Objeto Relacional em PHP com Outlet ORM

  1. 1. MAPEAMENTO OBJETO-RELACIONAL EM PHP COM OUTLET ORM Fábio Rehm
  2. 2. 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)
  3. 3. Diferenças Relacional OO
  4. 4. Diferenças Relacional OO
  5. 5. Diferenças Relacional OO
  6. 6. Diferenças Relacional OO
  7. 7. Diferenças Relacional OO ?
  8. 8. Diferenças Relacional OO ?
  9. 9. Diferenças Relacional OO ?
  10. 10. Antigamente...
  11. 11. ... era trabalhoso ... Baixa produtividade X inúmeras tabelas e operações
  12. 12. ... difícil de manter ... Duplicidade de código X inúmeras tabelas e operações
  13. 13. ... e difícil de modificar Inviável substituir MySQL por outro banco
  14. 14. 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)
  15. 15. Como funciona um ORM? De forma simplificada:  Classes são mapeadas em tabelas  Instâncias (objetos) são (automaticamente) mapeadas em registros
  16. 16. 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
  17. 17. Row Data Gateway http://martinfowler.com/eaaCatalog/rowDataGateway.html  Classe para manipular uma linha da tabela  Implementa apenas inserções e atualizações
  18. 18. 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
  19. 19. Data Mapper http://martinfowler.com/eaaCatalog/dataMapper.html  Persiste o modelo de objetos  Mapeamento externo a classe
  20. 20. 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)
  21. 21. simplicidade 10 arquivos +- 50 kb
  22. 22. liberdade ou
  23. 23. Requisitos  PHP 5.1.6+  Suporte a PDO para o banco de dados desejado  PHP 5.2+ para suporte a objetos DateTime
  24. 24. Instalação 1. Download http://www.outlet-orm.org/site/downloads 2. Descompactar 3. set_include_path(PASTA_DE_DESTINO.';' . get_include_path()); (opcional)
  25. 25. Exemplo
  26. 26. Exemplo
  27. 27. Mapeamento http://www.outlet-orm.org/manual/ch04.html
  28. 28. Mapeamento http://www.outlet-orm.org/manual/ch04.html
  29. 29. Mapeamento http://www.outlet-orm.org/manual/ch04.html
  30. 30. Mapeamento http://www.outlet-orm.org/manual/ch04.html
  31. 31. Mapeamento em XML http://groups.google.com.br/group/outlet-orm/files
  32. 32. Relacionamentos definição chave estrangeira definição
  33. 33. Relacionamentos
  34. 34. CRUD
  35. 35. CRUD
  36. 36. ( 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.
  37. 37. CRUD
  38. 38. CRUD
  39. 39. CRUD - relacionamentos
  40. 40. Lazy loading
  41. 41. Fluent interface + Eager fetching
  42. 42. 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á)
  43. 43. 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, …)
  44. 44. Unidade de trabalho
  45. 45. Plugin para Eclipse
  46. 46. 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
  47. 47. Dúvidas?
  48. 48. Obrigado! Fábio Rehm fgrehm@gmail.com @fgrehm (twitter)

×