Doctrine 2 camada de persistência para php

51
Doctrine 2 Camada de persistência para PHP Fabio B. Silva : fabiosilva.info / [email protected] / @FabioBatSilva

description

Palestra apresentada na sfcon 2012, conferência brasileira sobre Symfony. Doctrine é o ORM que está se tornando um padrão para aplicações php de meio e grande porte. Conheça as vantagens e desvantagens em usá-lo, componentes e melhores práticas para o desenvolvimento de uma aplicação ágil, usufruindo de todo o poder do doctrine de forma escalável e mantendo um código de qualidade.

Transcript of Doctrine 2 camada de persistência para php

Page 1: Doctrine 2   camada de persistência para php

Doctrine 2Camada de persistência para PHP

Fabio B. Silva : fabiosilva.info / [email protected] / @FabioBatSilva

Page 2: Doctrine 2   camada de persistência para php

Quem é esse cara ai ?• Fabio B. Silva

• Desenvolvedor php

• Desenvolvedor java

• Doctrine core developer

• @FabioBatSilva

• github.com/FabioBatSilva

• Alcoolatra nas horas vagas

Page 3: Doctrine 2   camada de persistência para php

Doctrine ORMCamada de persistência para PHP

Page 4: Doctrine 2   camada de persistência para php

Espera ai, o que é esse tal ORM ?

Page 5: Doctrine 2   camada de persistência para php

Espera ai, o que é esse tal ORM ?

O ORM (Object-relational mapping) é uma camada intermediária entre um banco de dados relacional e objetos. De um lado, você tem as tabelas e seus relacionamentos, do outro os objetos de uma linguagem OO.

Page 6: Doctrine 2   camada de persistência para php

O que um ORM faz ?

• Mapeia dados do DB para Objetos

• Mapeia relacionamentos

• Lida com conversão de tipos

• Normalmente é cross database

Page 7: Doctrine 2   camada de persistência para php

Quais problemas ele resolve ?

• Agiliza o desenvolvimento

• Diminui a quantidade de código

• Ótimo na maioria das situações

• Te ajuda a usar o poder dos objetos

• Faz parte de um bom design de software

Page 8: Doctrine 2   camada de persistência para php

Quais problemas você pode ter ?

• Curva de aprendizado

• Requer conhecimentos em OOP

• Performance

• Não resolve todos os problemas

Page 9: Doctrine 2   camada de persistência para php

Em quais casos devo usar ?

• Se você gosta de OOP

• Se estiver cansado de SQL

• Se quiser algo ágil e de qualidade

Page 10: Doctrine 2   camada de persistência para php

Em quais casos NÃO devo usar ?

• Se não conhece OOP

• Se estiver desenvolvendo o facebook

• Se sua aplicação for realmente pequena

Page 11: Doctrine 2   camada de persistência para php

ORM PHP

• Doctrine

• Propel

• RedBeanPHP

• PHPActiveRecord

Page 12: Doctrine 2   camada de persistência para php

ORM PHP

Esqueça os outros, vamos falar de doctrine !

Page 13: Doctrine 2   camada de persistência para php

Doctrine 1 : De onde viemos

• PHP 5.2.3 +

• Baseado no Active Record

• Suporte a Migrations

• Command line

• Cache

• Fácil de usar

Page 14: Doctrine 2   camada de persistência para php

Doctrine 1 : De onde viemos

Page 15: Doctrine 2   camada de persistência para php

Doctrine 1 : De onde viemos

Page 16: Doctrine 2   camada de persistência para php

Doctrine 1 : Problemas

• Lento

• ActiveRecord

• Difícil de testar

• Alto consumo de memória

•Mesmo assim o melhor ORM disponível na época

Page 17: Doctrine 2   camada de persistência para php

Doctrine 2 : Onde estamos

● PHP 5.3 +● Totalmente Rescrito● Otimizado● Componentes

● DBAL

● Common

● ORM

● Versão atual 2.2 ( 2.3 deve sair em julho )

Page 18: Doctrine 2   camada de persistência para php

DBAL ● Database Abstraction Layer

● Multi Plataforma

● SQL Query Builder

● Schema-Manager

Page 19: Doctrine 2   camada de persistência para php

Common ● Annotations

● Collections

● Events

● Cache

Page 20: Doctrine 2   camada de persistência para php

CommonAnnotatinons

Page 21: Doctrine 2   camada de persistência para php

CommonCollections

Page 22: Doctrine 2   camada de persistência para php

CommonCache

Page 23: Doctrine 2   camada de persistência para php

ORM● Baseado no JPA (Hibernate / EJB / Nhibernate)● Construído sobre componentes● Data Mapper● Objetos Simples● DQL● Otimizado● Performance

Page 24: Doctrine 2   camada de persistência para php

Classe SimplesNada de estender classes do ORM

Page 25: Doctrine 2   camada de persistência para php

EntityManagerPonte central de acesso as funcionalidades do ORM

Page 26: Doctrine 2   camada de persistência para php

EntityManagerPonte central de acesso as funcionalidades do ORM

Page 27: Doctrine 2   camada de persistência para php

EntityManagerPonte central de acesso as funcionalidades do ORM

Page 28: Doctrine 2   camada de persistência para php

Relacionamentos

● OneToOne● ManyToOne● OneToMany● ManyToMany

Page 29: Doctrine 2   camada de persistência para php

RelacionamentosOneToOne

Page 30: Doctrine 2   camada de persistência para php

RelacionamentosManyToOne

Page 31: Doctrine 2   camada de persistência para php

RelacionamentosOneToMany

Page 32: Doctrine 2   camada de persistência para php

RelacionamentosOneToMany

Mapeamento

Mapeie o lado inverso apenas quando for usa-lo

Page 33: Doctrine 2   camada de persistência para php

RelacionamentosManyToMany

Page 34: Doctrine 2   camada de persistência para php

Herança

● Concrete Table Inheritance● Single Table Inheritance● Class Table Inheritance

Page 35: Doctrine 2   camada de persistência para php

Herança

Uma classe em uma tabela

● Concrete Table Inheritance● Single Table Inheritance● Class Table Inheritance

Page 36: Doctrine 2   camada de persistência para php

HerançaConcrete table inheritance

Page 37: Doctrine 2   camada de persistência para php

Herança

Várias classes em uma mesma tabela

● Concrete Table Inheritance● Single Table Inheritance● Class Table Inheritance

Page 38: Doctrine 2   camada de persistência para php

HerançaSingle table inheritance

Page 39: Doctrine 2   camada de persistência para php

Herança

Várias classes em várias tabelas

● Concrete Table Inheritance● Single Table Inheritance● Class Table Inheritance

Page 40: Doctrine 2   camada de persistência para php

HerançaClass table inheritance

Page 41: Doctrine 2   camada de persistência para php

DQLDoctrine Query Language

● DQL : Doctrine Query Language● Usa Classes e propriedades invés de tabelas e colunas● Normalmente retorna uma lista de entidades● Parseado para SQL nativa● Cross database

Page 42: Doctrine 2   camada de persistência para php

DQL

Page 43: Doctrine 2   camada de persistência para php

DQL

Page 44: Doctrine 2   camada de persistência para php

DQL

Você esta fazendo isso errado !!!

Page 45: Doctrine 2   camada de persistência para php

DQL

Page 46: Doctrine 2   camada de persistência para php

CacheMelhor amigo da performance

● Metadata Cache● Query Cache● Result Cache

Page 47: Doctrine 2   camada de persistência para php

CacheMelhor amigo da performance

● Metadata Cache● Query Cache● Result Cache

Cache dos mapeamentos das entidades

Page 48: Doctrine 2   camada de persistência para php

CacheMelhor amigo da performance

● Metadata Cache● Query Cache● Result Cache

Cache dos parser de DQL para SQL nativa

Page 49: Doctrine 2   camada de persistência para php

CacheMelhor amigo da performance

● Metadata Cache● Query Cache● Result Cache

Cache dos resultados de consultas

Page 50: Doctrine 2   camada de persistência para php

Conclusão

● Simplifica as coisas

● Maduro e estável

● Cresce a cada dia

● Muita fácil de integrar com Symfony2

● Doctrine é PHODA !!

Page 51: Doctrine 2   camada de persistência para php

Doctrine 2Camada de persistência para PHP

Fabio B. Silva : fabiosilva.info / [email protected] / @FabioBatSilva

Perguntas ???