Mapeamento Objeto Relacional em PHP com Outlet ORM

6,208 views
5,978 views

Published on

Published in: Technology
1 Comment
2 Likes
Statistics
Notes
No Downloads
Views
Total views
6,208
On SlideShare
0
From Embeds
0
Number of Embeds
40
Actions
Shares
0
Downloads
116
Comments
1
Likes
2
Embeds 0
No embeds

No notes for 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)

×