O documento discute padrões e melhorias no Zend Framework 2. Inclui discussões sobre namespaces, autoloading, performance de plugins e eventos. Também apresenta uma introdução ao conceito de dependency injection no Zend Framework.
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