Siga a doutrina certa

Post on 05-Jul-2015

517 views 2 download

Transcript of Siga a doutrina certa

DoctrineSiga a doutrina certa

Fabio B. Silva :github.com/FabioBatSilva / fabio.bat.silva@gmail.com / @FabioBatSilva

Quem é esse cara ai ?• Fabio B. Silva

• Desenvolvedor php

• Desenvolvedor java

• Doctrine core developer

• @FabioBatSilva

• github.com/FabioBatSilva

• Alcoolatra nas horas vagas

AGENDA

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

Classe Simples

EntityManagerPonte central de acesso as funcionalidades do ORM

EntityManagerPonte central de acesso as funcionalidades do ORM

EntityManagerPonte central de acesso as funcionalidades do ORM

Relacionamentos

● OneToOne● ManyToOne● OneToMany● ManyToMany

RelacionamentosOneToOne

RelacionamentosManyToOne

RelacionamentosOneToMany

RelacionamentosManyToMany

Fetch Mode

● EAGER● LAZY (default)● EXTRA_LAZY

Fetch ModeEAGER

Relacionamento é carregado junto com a entidade

Fetch ModeLAZY

Carrega o relacionamento apenas quando é invocado

Fetch ModeEXTRA_LAZY

Carrega o relacionamento apenas quando um elemento é invocado

Cascade Operations

● persist● remove● merge● detach● all

Operações executadas nos relacionamentos

Herança

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

Herança

Uma classe em uma tabela

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

HerançaConcrete table inheritance

HerançaConcrete table inheritance

Herança

Várias classes em uma mesma tabela

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

HerançaSingle table inheritance

HerançaSingle table inheritance

Herança

Várias classes em várias tabelas

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

HerançaClass table inheritance

HerançaClass table inheritance

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

DQL

Perguntas ?

ORMs não tem boa performance ...● São lentos● Complicados de usar● Complicados de configurar● Só podem ser usados para coisas simples

ORMs não tem boa performance ...● O problema é cultural● Desenvolvedores usam ORM porque não conhecem SQL e SGBDs● Conheça bancos de dados antes de usar um ORM● ORM não substitui PDO, são construídos sobre ele● A abstração tem um custo● Read the fucking manual

Best Practices.

Best Practices :Não use atributos públicos

Best Practices :Não use caracteres especiais

Best Practices :Atenção no mapeamento dos relacionamentos

Lado inverso apenas realmente quando for usa-lo

Best Practices :Evite chaves compostas

Trabalho extra para resolver o identificador

Best Practices :Evite chaves compostas

Best Practices :Cuidado no uso de eventos

Evento é disparado para todas as entidades persistidas.

Best Practices :Cuidado no uso de eventos

Best Practices :Cuidado no uso de eventos

version_compare(DOCTRINE_VERSION, '2.4-DEV', '>=')

Best Practices :Query builder

WTF ???

Best Practices :Query builder

Best Practices :Get reference

Carrega a entidade apenas para persistir

Best Practices :Get reference

Best Practices :Repository

Evite lógica no Controller

Best Practices :Repository

Best Practices :Fetch join association

Três consultas executadas

Best Practices :Fetch join association

Best Practices :Partial objects

Seleciona todos os atributos da entidade

Best Practices :Partial objects

Best Practices :Named Queries

Best Practices :Named Native Queries

CacheMelhor amigo da performance

● Metadata Cache● Query Cache● Result Cache

CacheMelhor amigo da performance

● Metadata Cache● Query Cache● Result Cache

Cache dos mapeamentos das entidades

CacheMelhor amigo da performance

● Metadata Cache● Query Cache● Result Cache

Cache dos parser de DQL para SQL nativa

CacheMelhor amigo da performance

● Metadata Cache● Query Cache● Result Cache

Cache dos resultados de consultas

DoctrineSiga a doutrina certa

Perguntas ???

Fabio B. Silva :github.com/FabioBatSilva / fabio.bat.silva@gmail.com / @FabioBatSilva