SlideShare a Scribd company logo
1 of 23
Download to read offline
Patterns
ZF2 Patterns


 Ramon Henrique Ornelas
 Twitter: @ramonornela
 Github: http://github.com/ramonornela




       13 de Novembro de 2011
Namespaces
Namespaces


- Cada arquivo de classe declara um namespace;
- Um namespace por arquivo;
- Qualquer classe que não usa o namespace atual
  (ou subnamespace) é importado e, normalmente, alias;
- Resolução Global é desencorajada, exceto no caso de classes referenciadas
   em strings.




       13 de Novembro de 2011
Autoloading
Problemas


- Muitas classes são carregadas sem necessidade;
- Faltando require_once em alguns componentes;
  Exemplo issue
   http://framework.zend.com/issues/browse/ZF-10291




      13 de Novembro de 2011
Melhorias


- Retirada as chamadas require_once;
- Segue PSR-0;
  - PSR = PHP Standards Recomendation
  - Libs que seguem está recomendação:
    Symfony, Doctrine, Zend Framework, PEAR2/Pyrus, Lithium, Agavi, etc.
  - Com isto permitirá carregar classes de 1 ou mais bibliotecas diferentes com um
    único autoloader e um único include path;
  - SplClassLoader! http://gist.github.com/221634 virá na versão 5.4 o/.
- Oferece múltiplas abordagens
  - ZF1 style;
  - Por namespace/vendor prefixo (convenção de nomenclatura ZF1) autoloading;
  - Class Map autoloading;
  - Module autoloading;
  - Resource autoloading;




       13 de Novembro de 2011
Performance


Class-Map mostram uma melhora de 25% sobre o autoloader ZF1 sem aceleração.
 - E melhorias 60-85%, quando estiver no cache opcode.

Namespaces / prefixos com caminhos específicos mostra ganhos de 10%
  sem aceleração.
 - E 40% quando melhorias de cache opcode.




      13 de Novembro de 2011
Plugin loading
Plugins???


- Action e view helpers;
  - Adapters;
  - Filter e Validators quando usados com Form (também os decoradores) e InputFilter.




      13 de Novembro de 2011
Problema


- Maneiras distintas para resolver dinamicamente as classes de plugin.
  - Caminhos relativos à classe chamada;
  - Caminho caminho-pilhas (mais comum);
  - Setters para indicar as classes;
- Abordagem comum é a pior;
  - Desempenho ruim; (performance);
  - Difícil depuração;




      13 de Novembro de 2011
Locator Precedência


- Mapa definidos no gerenciador de plugin de concreto;
- Mapas estáticos (registo mais recente tem precedência);
- Mapeamento passados ​na instância;
- Mapeamento explícito.




      13 de Novembro de 2011
Lazy Loading Plugin Broker

- Registra “specs” para o broker (dependência);
- Quando esse plugin é solicitado, as opções fornecidas serão usadas
  a menos que novas opções sejam fornecidas.




      13 de Novembro de 2011
Event Manager
Problema

- Como introduzir debug/logging na framework?
- Como permitir implementação de cache pelos utilizadores?
- Como permitir utilizadores introduzir filtros e validações?




      13 de Novembro de 2011
Requisitos

- Razoavelmente fácil de entender;
- Permitir a interrupção da execução
- Permitir a priorização de manipuladores;
- Capacidade para anexar ao evento muitos componentes de emissão de uma só vez.




      13 de Novembro de 2011
Terminologia

- Um Event Manager é um objeto que agrega os ouvintes para um ou mais
  eventos com nome, e que desencadeia eventos;
- Um Listener é um retorno que pode reagir a um evento;
- Um Event é uma ação.




      13 de Novembro de 2011
Casos de uso

- Implementação simples do padrão (pattern) observer;
- Implementação Orientada a Aspectos;
- Implementação de event-driven arquiteturas.




      13 de Novembro de 2011
Dependency Injection
Simples Definição

- Define maneiras de passar as dependências a um objeto.




      13 de Novembro de 2011
Di vs DiC

- Di é um pattern;
- Dic (Container) é uma ferramenta;




      13 de Novembro de 2011
ZendDiDefinition

Definições é o lugar onde ZendDi tenta compreender a estrutura do código.




      13 de Novembro de 2011
OBRIGADO!!!

More Related Content

What's hot

Visual Studio Summit 2016: C# 7 - Olhando para o futuro
Visual Studio Summit 2016: C# 7 - Olhando para o futuroVisual Studio Summit 2016: C# 7 - Olhando para o futuro
Visual Studio Summit 2016: C# 7 - Olhando para o futuroRogério Moraes de Carvalho
 
Big data e PostgreSQL
Big data e PostgreSQLBig data e PostgreSQL
Big data e PostgreSQLEuler Taveira
 
Desmistificando Replicação no PostgreSQL
Desmistificando Replicação no PostgreSQLDesmistificando Replicação no PostgreSQL
Desmistificando Replicação no PostgreSQLEuler Taveira
 
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...Kelver Merlotti
 
TDC 2012 Goiânia: Trilha .NET - Novidades do .NET Framework 4.5
TDC 2012 Goiânia: Trilha .NET - Novidades do .NET Framework 4.5TDC 2012 Goiânia: Trilha .NET - Novidades do .NET Framework 4.5
TDC 2012 Goiânia: Trilha .NET - Novidades do .NET Framework 4.5Rogério Moraes de Carvalho
 
Resolvendo problemas de performance em aplicações Delphi e bancos de dados
Resolvendo problemas de performance em aplicações Delphi e bancos de dadosResolvendo problemas de performance em aplicações Delphi e bancos de dados
Resolvendo problemas de performance em aplicações Delphi e bancos de dadosAndreano Lanusse
 
ASP.NET Core, .NET Core e EF Core: multiplataforma e otimizados para a nuvem
ASP.NET Core, .NET Core e EF Core: multiplataforma e otimizados para a nuvemASP.NET Core, .NET Core e EF Core: multiplataforma e otimizados para a nuvem
ASP.NET Core, .NET Core e EF Core: multiplataforma e otimizados para a nuvemRogério Moraes de Carvalho
 
CVS - Slides Parte 4 - Avançado
CVS - Slides Parte 4 - AvançadoCVS - Slides Parte 4 - Avançado
CVS - Slides Parte 4 - AvançadoMarden Neubert
 
A arquitetura modular do Java 9
A arquitetura modular do Java 9A arquitetura modular do Java 9
A arquitetura modular do Java 9Helder da Rocha
 
IAsyncResult Pattern ou Asynchronous Programming Model (APM)
IAsyncResult Pattern ou Asynchronous Programming Model (APM)IAsyncResult Pattern ou Asynchronous Programming Model (APM)
IAsyncResult Pattern ou Asynchronous Programming Model (APM)Rogério Moraes de Carvalho
 
Controlando Projetos com Netbeans e Subversion
Controlando Projetos com Netbeans e SubversionControlando Projetos com Netbeans e Subversion
Controlando Projetos com Netbeans e Subversionlekitamura
 
Java 02 Iniciando Uso Java
Java 02 Iniciando Uso JavaJava 02 Iniciando Uso Java
Java 02 Iniciando Uso JavaRegis Magalhães
 
Conhecendo o Zend Framework
Conhecendo o Zend FrameworkConhecendo o Zend Framework
Conhecendo o Zend FrameworkJaime Neto
 

What's hot (20)

Visual Studio Summit 2016: C# 7 - Olhando para o futuro
Visual Studio Summit 2016: C# 7 - Olhando para o futuroVisual Studio Summit 2016: C# 7 - Olhando para o futuro
Visual Studio Summit 2016: C# 7 - Olhando para o futuro
 
Contextos
ContextosContextos
Contextos
 
Pgquarrel
PgquarrelPgquarrel
Pgquarrel
 
plsql oracle
plsql oracleplsql oracle
plsql oracle
 
Big data e PostgreSQL
Big data e PostgreSQLBig data e PostgreSQL
Big data e PostgreSQL
 
Desmistificando Replicação no PostgreSQL
Desmistificando Replicação no PostgreSQLDesmistificando Replicação no PostgreSQL
Desmistificando Replicação no PostgreSQL
 
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...
 
KrahoDB
KrahoDBKrahoDB
KrahoDB
 
TDC 2012 Goiânia: Trilha .NET - Novidades do .NET Framework 4.5
TDC 2012 Goiânia: Trilha .NET - Novidades do .NET Framework 4.5TDC 2012 Goiânia: Trilha .NET - Novidades do .NET Framework 4.5
TDC 2012 Goiânia: Trilha .NET - Novidades do .NET Framework 4.5
 
Resolvendo problemas de performance em aplicações Delphi e bancos de dados
Resolvendo problemas de performance em aplicações Delphi e bancos de dadosResolvendo problemas de performance em aplicações Delphi e bancos de dados
Resolvendo problemas de performance em aplicações Delphi e bancos de dados
 
ASP.NET Core, .NET Core e EF Core: multiplataforma e otimizados para a nuvem
ASP.NET Core, .NET Core e EF Core: multiplataforma e otimizados para a nuvemASP.NET Core, .NET Core e EF Core: multiplataforma e otimizados para a nuvem
ASP.NET Core, .NET Core e EF Core: multiplataforma e otimizados para a nuvem
 
CVS - Slides Parte 4 - Avançado
CVS - Slides Parte 4 - AvançadoCVS - Slides Parte 4 - Avançado
CVS - Slides Parte 4 - Avançado
 
A arquitetura modular do Java 9
A arquitetura modular do Java 9A arquitetura modular do Java 9
A arquitetura modular do Java 9
 
IAsyncResult Pattern ou Asynchronous Programming Model (APM)
IAsyncResult Pattern ou Asynchronous Programming Model (APM)IAsyncResult Pattern ou Asynchronous Programming Model (APM)
IAsyncResult Pattern ou Asynchronous Programming Model (APM)
 
Java 9, 10 e ... 11
Java 9, 10 e ... 11Java 9, 10 e ... 11
Java 9, 10 e ... 11
 
Controlando Projetos com Netbeans e Subversion
Controlando Projetos com Netbeans e SubversionControlando Projetos com Netbeans e Subversion
Controlando Projetos com Netbeans e Subversion
 
Java 02 Iniciando Uso Java
Java 02 Iniciando Uso JavaJava 02 Iniciando Uso Java
Java 02 Iniciando Uso Java
 
Zephir
ZephirZephir
Zephir
 
Conhecendo o Zend Framework
Conhecendo o Zend FrameworkConhecendo o Zend Framework
Conhecendo o Zend Framework
 
Java 9, 10, 11
Java 9, 10, 11Java 9, 10, 11
Java 9, 10, 11
 

Viewers also liked

Viewers also liked (7)

BritneCook Cover Letter
BritneCook Cover LetterBritneCook Cover Letter
BritneCook Cover Letter
 
Valentino2
Valentino2Valentino2
Valentino2
 
Trend sumbar (Oleh Irna Mutiara)
Trend sumbar (Oleh Irna Mutiara)Trend sumbar (Oleh Irna Mutiara)
Trend sumbar (Oleh Irna Mutiara)
 
Bando gravi malattie INPS
Bando gravi malattie INPSBando gravi malattie INPS
Bando gravi malattie INPS
 
Galeriku
GalerikuGaleriku
Galeriku
 
Gesfin 2013
Gesfin 2013Gesfin 2013
Gesfin 2013
 
الحاسب الالي 2
الحاسب الالي 2الحاسب الالي 2
الحاسب الالي 2
 

Similar to ZF2 Patterns Guide

Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO, Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO, Vinicius Pulgatti
 
Plataforma Zope Plone na PGR
Plataforma Zope Plone na PGRPlataforma Zope Plone na PGR
Plataforma Zope Plone na PGRLucas Brasilino
 
Threads - .Net Framework 4.0
Threads - .Net Framework 4.0Threads - .Net Framework 4.0
Threads - .Net Framework 4.0Charles Fortes
 
Phpreact flisol-fb-2014
Phpreact flisol-fb-2014Phpreact flisol-fb-2014
Phpreact flisol-fb-2014Adler Medrado
 
O que esperar do Zend Framework 2
O que esperar do Zend Framework 2O que esperar do Zend Framework 2
O que esperar do Zend Framework 2Flávio Lisboa
 
Terraform.pptx
Terraform.pptxTerraform.pptx
Terraform.pptxEsli Silva
 
Tudo que você precisa saber sobre as principais alterações no Drupal 8
Tudo que você precisa saber sobre as principais alterações no Drupal 8 Tudo que você precisa saber sobre as principais alterações no Drupal 8
Tudo que você precisa saber sobre as principais alterações no Drupal 8 Acquia
 
Web Training Aula 03: Introduction to Laravel
Web Training Aula 03: Introduction to LaravelWeb Training Aula 03: Introduction to Laravel
Web Training Aula 03: Introduction to LaravelMozDevz
 
SegurançA BáSica Do Apache
SegurançA BáSica Do ApacheSegurançA BáSica Do Apache
SegurançA BáSica Do ApacheFelipe Santos
 
Modularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-endModularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-endMario Guedes
 
Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo
Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse VirgoModularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo
Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse VirgoRegis Machado
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsIgo Coelho
 
Zend Framework 2 é legal ! Mas como ele funciona ?!
Zend Framework 2 é legal ! Mas como ele funciona ?!Zend Framework 2 é legal ! Mas como ele funciona ?!
Zend Framework 2 é legal ! Mas como ele funciona ?!Alefe Variani
 

Similar to ZF2 Patterns Guide (20)

Cakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudouCakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudou
 
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO, Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
 
Plataforma Zope Plone na PGR
Plataforma Zope Plone na PGRPlataforma Zope Plone na PGR
Plataforma Zope Plone na PGR
 
De 1 a 1.000.00 de usuários
De 1 a 1.000.00 de usuáriosDe 1 a 1.000.00 de usuários
De 1 a 1.000.00 de usuários
 
Threads - .Net Framework 4.0
Threads - .Net Framework 4.0Threads - .Net Framework 4.0
Threads - .Net Framework 4.0
 
Phpreact flisol-fb-2014
Phpreact flisol-fb-2014Phpreact flisol-fb-2014
Phpreact flisol-fb-2014
 
OpenLDAP: Porque utilizá-lo
OpenLDAP: Porque utilizá-loOpenLDAP: Porque utilizá-lo
OpenLDAP: Porque utilizá-lo
 
Ferramentas open-source
Ferramentas open-sourceFerramentas open-source
Ferramentas open-source
 
O que esperar do Zend Framework 2
O que esperar do Zend Framework 2O que esperar do Zend Framework 2
O que esperar do Zend Framework 2
 
Terraform.pptx
Terraform.pptxTerraform.pptx
Terraform.pptx
 
Tudo que você precisa saber sobre as principais alterações no Drupal 8
Tudo que você precisa saber sobre as principais alterações no Drupal 8 Tudo que você precisa saber sobre as principais alterações no Drupal 8
Tudo que você precisa saber sobre as principais alterações no Drupal 8
 
Terraform.pdf
Terraform.pdfTerraform.pdf
Terraform.pdf
 
Web Training Aula 03: Introduction to Laravel
Web Training Aula 03: Introduction to LaravelWeb Training Aula 03: Introduction to Laravel
Web Training Aula 03: Introduction to Laravel
 
Mastering Laravel
Mastering LaravelMastering Laravel
Mastering Laravel
 
SegurançA BáSica Do Apache
SegurançA BáSica Do ApacheSegurançA BáSica Do Apache
SegurançA BáSica Do Apache
 
Modularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-endModularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-end
 
Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo
Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse VirgoModularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo
Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e Servlets
 
Zend Framework 2 é legal ! Mas como ele funciona ?!
Zend Framework 2 é legal ! Mas como ele funciona ?!Zend Framework 2 é legal ! Mas como ele funciona ?!
Zend Framework 2 é legal ! Mas como ele funciona ?!
 

ZF2 Patterns Guide

  • 2. ZF2 Patterns Ramon Henrique Ornelas Twitter: @ramonornela Github: http://github.com/ramonornela 13 de Novembro de 2011
  • 4. Namespaces - Cada arquivo de classe declara um namespace; - Um namespace por arquivo; - Qualquer classe que não usa o namespace atual (ou subnamespace) é importado e, normalmente, alias; - Resolução Global é desencorajada, exceto no caso de classes referenciadas em strings. 13 de Novembro de 2011
  • 6. Problemas - Muitas classes são carregadas sem necessidade; - Faltando require_once em alguns componentes; Exemplo issue http://framework.zend.com/issues/browse/ZF-10291 13 de Novembro de 2011
  • 7. Melhorias - Retirada as chamadas require_once; - Segue PSR-0; - PSR = PHP Standards Recomendation - Libs que seguem está recomendação: Symfony, Doctrine, Zend Framework, PEAR2/Pyrus, Lithium, Agavi, etc. - Com isto permitirá carregar classes de 1 ou mais bibliotecas diferentes com um único autoloader e um único include path; - SplClassLoader! http://gist.github.com/221634 virá na versão 5.4 o/. - Oferece múltiplas abordagens - ZF1 style; - Por namespace/vendor prefixo (convenção de nomenclatura ZF1) autoloading; - Class Map autoloading; - Module autoloading; - Resource autoloading; 13 de Novembro de 2011
  • 8. Performance Class-Map mostram uma melhora de 25% sobre o autoloader ZF1 sem aceleração. - E melhorias 60-85%, quando estiver no cache opcode. Namespaces / prefixos com caminhos específicos mostra ganhos de 10% sem aceleração. - E 40% quando melhorias de cache opcode. 13 de Novembro de 2011
  • 10. Plugins??? - Action e view helpers; - Adapters; - Filter e Validators quando usados com Form (também os decoradores) e InputFilter. 13 de Novembro de 2011
  • 11. Problema - Maneiras distintas para resolver dinamicamente as classes de plugin. - Caminhos relativos à classe chamada; - Caminho caminho-pilhas (mais comum); - Setters para indicar as classes; - Abordagem comum é a pior; - Desempenho ruim; (performance); - Difícil depuração; 13 de Novembro de 2011
  • 12. Locator Precedência - Mapa definidos no gerenciador de plugin de concreto; - Mapas estáticos (registo mais recente tem precedência); - Mapeamento passados ​na instância; - Mapeamento explícito. 13 de Novembro de 2011
  • 13. Lazy Loading Plugin Broker - Registra “specs” para o broker (dependência); - Quando esse plugin é solicitado, as opções fornecidas serão usadas a menos que novas opções sejam fornecidas. 13 de Novembro de 2011
  • 15. Problema - Como introduzir debug/logging na framework? - Como permitir implementação de cache pelos utilizadores? - Como permitir utilizadores introduzir filtros e validações? 13 de Novembro de 2011
  • 16. Requisitos - Razoavelmente fácil de entender; - Permitir a interrupção da execução - Permitir a priorização de manipuladores; - Capacidade para anexar ao evento muitos componentes de emissão de uma só vez. 13 de Novembro de 2011
  • 17. Terminologia - Um Event Manager é um objeto que agrega os ouvintes para um ou mais eventos com nome, e que desencadeia eventos; - Um Listener é um retorno que pode reagir a um evento; - Um Event é uma ação. 13 de Novembro de 2011
  • 18. Casos de uso - Implementação simples do padrão (pattern) observer; - Implementação Orientada a Aspectos; - Implementação de event-driven arquiteturas. 13 de Novembro de 2011
  • 20. Simples Definição - Define maneiras de passar as dependências a um objeto. 13 de Novembro de 2011
  • 21. Di vs DiC - Di é um pattern; - Dic (Container) é uma ferramenta; 13 de Novembro de 2011
  • 22. ZendDiDefinition Definições é o lugar onde ZendDi tenta compreender a estrutura do código. 13 de Novembro de 2011