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!!!

Wisher

  • 1.
  • 2.
    ZF2 Patterns RamonHenrique Ornelas Twitter: @ramonornela Github: http://github.com/ramonornela 13 de Novembro de 2011
  • 3.
  • 4.
    Namespaces - Cada arquivode 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
  • 5.
  • 6.
    Problemas - Muitas classessã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 aschamadas 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 umamelhora 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
  • 9.
  • 10.
    Plugins??? - Action eview helpers; - Adapters; - Filter e Validators quando usados com Form (também os decoradores) e InputFilter. 13 de Novembro de 2011
  • 11.
    Problema - Maneiras distintaspara 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 - Mapadefinidos 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 PluginBroker - 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
  • 14.
  • 15.
    Problema - Como introduzirdebug/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ácilde 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 EventManager é 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
  • 19.
  • 20.
    Simples Definição - Definemaneiras 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 é olugar onde ZendDi tenta compreender a estrutura do código. 13 de Novembro de 2011
  • 23.