O documento apresenta conceitos sobre eventos e serviços no framework Zend Framework 2. Eventos permitem comunicação entre módulos através do paradigma de publicação/assinatura e desacoplamento. Serviços implementam injeção de dependência e composição através da classe ServiceManager.
Trabalhando com eventos e serviços no Zend Framework 2
1.
2. 2
# whoami
William Felipe Welter
● Líder das equipes de PHP e PostgreSQL na 4Linux
● Bacharel em Ciência da Computação
● Experiencia com desenvolvimento e infraestrutura
4. Desacoplamento PubSub Desacoplamento
4
Introdução ao ZF2
Modular
Eventos Serviços IoC
Composição Vs Herança
Dependency Injection
SubjectObserver
Escalabilidade
5. 5
Eventos
● Implementado pela classe “EventManager”
● É utilizado extensivamente no framework
● Permite utilizar o paradigma Pub Sub e Subject Observer
● Desacoplamento e independência entre módulos
13. 13
Eventos
● Comunicação entre módulos
● Executar rotinas não relacionadas a classe
● Tratar o comportamento do framework
14. 14
Eventos
Comunicação entre módulos
● Suponha que criamos um módulo de “gamification”
● Nossa aplicação precisa utilizar este modulo para:
● Pontuar usuários
● Gerar badges
● Como “consumir” o modulo de “gamefication” sem torná-lo uma
dependência ?
15. 15
Eventos
Rotinas não relacionadas a classe
● Suponha que temos uma classe de modelo para realizar pagamentos
de uma loja virtual.
● Nossa classe possui um método “pagarParcelado()” que precisa:
● Avaliar se valor das parcelas estão de acordo com as regras
● Se o produto pode ser parcelado
● Efetuar o pagamento
● Imagine que seu chefe solicitou que seja implementada um avaliação
de risco, o que você faria ?
16. 16
Eventos
Tratar comportamento do framework
● Alterar layout baseado na rota
● Verificar permissões do usuário antes de executar um “action”
● Injetar informações de debug no layout
● Cachear “views”.
21. 21
Eventos
● Mecanismo que “interliga” instancias do
“EventManager”
● Permite tratar eventos de diferentes instancias.
● Não deve ser instanciado!
● Obtenha a partir de qualquer EventManager
através do método “getSharedManager()”
31. 31
Eventos
● Listeners podem fazer “curto circuito” através
do método “stopPropagation()”
● Pode se criar uma função de avaliação de
retorno na trigger que decide sobre a
propagação.
39. 39
Eventos
BOOTSTRAP
ROUTE DISPATCH RENDER
● Tratamento da requisição
● Valida rota disponível
● Mapeia controller/action
DISPATCH_ERROR
FINISH
RENDER_ERROR
● Instancia a controller
● Executa a action
● Renderiza a vie●wDisparado após a
renderização da
view
● Inicializa o MVC
41. 41
Serviços
● Implementado pela classe “ServiceManager”
● É utilizado extensivamente no framework
● Injeção de dependências
● Permite utilizar o paradigma IoC
● Composição VS herança
● Uma instancia por serviço
54. 54
Serviços
● Pode-se utilizar qualquer tipo “invokable” do
PHP
● Classes que não possuem dependência no seu
construtor.
● Útil para definir serviços que serão utilizados
como dependências de outros serviços.
58. 58
Serviços
● Fabricar uma instancia de uma classe
● Injetar dependências presentes no construtor.
● Útil para compor dependências
● Closure
● Implementação da “FactoryInterface”