View
5.362
Download
4
Category
Preview:
Citation preview
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)
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
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)
( 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
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
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
Recommended