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