SlideShare uma empresa Scribd logo
1 de 59
Baixar para ler offline
Doctrine
                 Siga 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
EntityManager
Ponte central de acesso as funcionalidades do ORM
EntityManager
Ponte central de acesso as funcionalidades do ORM
EntityManager
Ponte central de acesso as funcionalidades do ORM
Relacionamentos
●
    OneToOne
●
    ManyToOne
●
    OneToMany
●
    ManyToMany
Relacionamentos
OneToOne
Relacionamentos
ManyToOne
Relacionamentos
OneToMany
Relacionamentos
ManyToMany
Fetch Mode
●
    EAGER
●
    LAZY (default)
●
    EXTRA_LAZY
Fetch Mode
EAGER




        Relacionamento é carregado junto com a entidade
Fetch Mode
LAZY




       Carrega o relacionamento apenas quando é invocado
Fetch Mode
EXTRA_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
●
    Concrete Table Inheritance
●
    Single Table Inheritance
●
    Class Table Inheritance




                     Uma classe em uma tabela
Herança
Concrete table inheritance
Herança
Concrete table inheritance
Herança
●
    Concrete Table Inheritance
●
    Single Table Inheritance
●
    Class Table Inheritance




                Várias classes em uma mesma tabela
Herança
Single table inheritance
Herança
Single table inheritance
Herança
●
    Concrete Table Inheritance
●
    Single Table Inheritance
●
    Class Table Inheritance




                   Várias classes em várias tabelas
Herança
Class table inheritance
Herança
Class table inheritance
DQL
Doctrine 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
Cache
Melhor amigo da performance


●
    Metadata Cache
●
    Query Cache
●
    Result Cache
Cache
Melhor amigo da performance


●
    Metadata Cache
●
    Query Cache
●
    Result Cache




             Cache dos mapeamentos das entidades
Cache
Melhor amigo da performance


●
    Metadata Cache
●
    Query Cache
●
    Result Cache




            Cache dos parser de DQL para SQL nativa
Cache
Melhor amigo da performance


●
    Metadata Cache
●
    Query Cache
●
    Result Cache




               Cache dos resultados de consultas
Doctrine
                 Siga a doutrina certa


 Perguntas ???




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

Mais conteúdo relacionado

Semelhante a Siga a doutrina certa

Processos iniciais do mapeamento OR
Processos iniciais do mapeamento ORProcessos iniciais do mapeamento OR
Processos iniciais do mapeamento ORNécio de Lima Veras
 
Workshop ExtJS4
Workshop ExtJS4Workshop ExtJS4
Workshop ExtJS4javamanrj
 
Zend Framework Estrutura e TDD
Zend Framework Estrutura e TDDZend Framework Estrutura e TDD
Zend Framework Estrutura e TDDPHP Day Curitiba
 
Polis Hyperlink Dicas e truques de Performance para JPA e EJB
Polis Hyperlink Dicas e truques de Performance para JPA e EJBPolis Hyperlink Dicas e truques de Performance para JPA e EJB
Polis Hyperlink Dicas e truques de Performance para JPA e EJBDanival Calegari
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011Evaldo Junior
 
[NetPonto] Entity Framework 4 Code-First
[NetPonto] Entity Framework 4 Code-First[NetPonto] Entity Framework 4 Code-First
[NetPonto] Entity Framework 4 Code-FirstVitor Tomaz
 
PostgreSql - Um banco de dados Open Source que figura entre os grandes
PostgreSql - Um banco de dados Open Source que figura entre os grandesPostgreSql - Um banco de dados Open Source que figura entre os grandes
PostgreSql - Um banco de dados Open Source que figura entre os grandesjoanio trade
 
Dicas e truques sobre performance em JavaEE, JPA e JSF
Dicas e truques sobre performance em JavaEE, JPA e JSFDicas e truques sobre performance em JavaEE, JPA e JSF
Dicas e truques sobre performance em JavaEE, JPA e JSFDr. Spock
 
Orientação a Objetos com PHP
Orientação a Objetos com PHPOrientação a Objetos com PHP
Orientação a Objetos com PHPAugusto Pascutti
 
Desenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonDesenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonFlávio Ribeiro
 
Python - Programando em alto nível
Python - Programando em alto nívelPython - Programando em alto nível
Python - Programando em alto nívelIgor Sobreira
 
performance em jQuery apps
performance em jQuery appsperformance em jQuery apps
performance em jQuery appsDavidson Fellipe
 
Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHPRangel Javier
 
Design Patterns on Rails
Design Patterns on RailsDesign Patterns on Rails
Design Patterns on Railstchandy
 
Dicas e Truques sobre Performance em Java EE, JPA e JSF
Dicas e Truques sobre Performance em Java EE, JPA e JSFDicas e Truques sobre Performance em Java EE, JPA e JSF
Dicas e Truques sobre Performance em Java EE, JPA e JSFDr. Spock
 
Voce se preocupa com performance ou é sempre problema da infra
Voce se preocupa com performance ou é sempre problema da infraVoce se preocupa com performance ou é sempre problema da infra
Voce se preocupa com performance ou é sempre problema da infraCDS
 
Projeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecordProjeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecordtchandy
 
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Luís Cobucci
 

Semelhante a Siga a doutrina certa (20)

Processos iniciais do mapeamento OR
Processos iniciais do mapeamento ORProcessos iniciais do mapeamento OR
Processos iniciais do mapeamento OR
 
Workshop ExtJS4
Workshop ExtJS4Workshop ExtJS4
Workshop ExtJS4
 
Zend Framework Estrutura e TDD
Zend Framework Estrutura e TDDZend Framework Estrutura e TDD
Zend Framework Estrutura e TDD
 
Polis Hyperlink Dicas e truques de Performance para JPA e EJB
Polis Hyperlink Dicas e truques de Performance para JPA e EJBPolis Hyperlink Dicas e truques de Performance para JPA e EJB
Polis Hyperlink Dicas e truques de Performance para JPA e EJB
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011
 
[NetPonto] Entity Framework 4 Code-First
[NetPonto] Entity Framework 4 Code-First[NetPonto] Entity Framework 4 Code-First
[NetPonto] Entity Framework 4 Code-First
 
Entity Framework 4 Code-First
Entity Framework 4 Code-FirstEntity Framework 4 Code-First
Entity Framework 4 Code-First
 
PostgreSql - Um banco de dados Open Source que figura entre os grandes
PostgreSql - Um banco de dados Open Source que figura entre os grandesPostgreSql - Um banco de dados Open Source que figura entre os grandes
PostgreSql - Um banco de dados Open Source que figura entre os grandes
 
Dicas e truques sobre performance em JavaEE, JPA e JSF
Dicas e truques sobre performance em JavaEE, JPA e JSFDicas e truques sobre performance em JavaEE, JPA e JSF
Dicas e truques sobre performance em JavaEE, JPA e JSF
 
Orientação a Objetos com PHP
Orientação a Objetos com PHPOrientação a Objetos com PHP
Orientação a Objetos com PHP
 
Desenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonDesenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando Python
 
Python - Programando em alto nível
Python - Programando em alto nívelPython - Programando em alto nível
Python - Programando em alto nível
 
Jj08 otimizacao
Jj08 otimizacaoJj08 otimizacao
Jj08 otimizacao
 
performance em jQuery apps
performance em jQuery appsperformance em jQuery apps
performance em jQuery apps
 
Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHP
 
Design Patterns on Rails
Design Patterns on RailsDesign Patterns on Rails
Design Patterns on Rails
 
Dicas e Truques sobre Performance em Java EE, JPA e JSF
Dicas e Truques sobre Performance em Java EE, JPA e JSFDicas e Truques sobre Performance em Java EE, JPA e JSF
Dicas e Truques sobre Performance em Java EE, JPA e JSF
 
Voce se preocupa com performance ou é sempre problema da infra
Voce se preocupa com performance ou é sempre problema da infraVoce se preocupa com performance ou é sempre problema da infra
Voce se preocupa com performance ou é sempre problema da infra
 
Projeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecordProjeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecord
 
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
 

Siga a doutrina certa