trabalhando com eventos e serviços no zend framework 2
TRANSCRIPT
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
3
Eventos e Serviços no ZF2
4
Introdução ao ZF2
Modular
Eventos Serviços IoCDependency Injection
Composição Vs Herança
DesacoplamentoDesacoplamento PubSub
SubjectObserver
Escalabilidade
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
6
Eventos
Como funcionam ?
7
Listeners
8
Listeners
● Qualquer tipo de “invokables” atrelado a um
evento
● “EventManager::attach()”
9
Triggers
10
Triggers
● Dispara um evento.
● EventManager::trigger()
11
Show me the code !
12
Eventos
Porque utilizar eventos ?
13
Eventos
● Comunicação entre módulos
● Executar rotinas não relacionadas a classe
● Tratar o comportamento do framework
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
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
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”.
17
Eventos
Onde registrar listeners ?
18
Eventos
● Classe Module
● Método onBootstrap()
19
Show me the code !
20
Eventos
O que é o SharedEventManager ?
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()”
22
Show me the code !
23
Show me the code !
24
Eventos
E se eu tiver mais de um listener para um evento?
25
Quem “chega” primeiro ?
26
Eventos
Na ordem que foram registrados, ou..
27
Eventos
● Defina prioridades
● Ultimo parâmetro
● Maior o numero, mais
tarde é executado.
● Padrão é 1
28
Show me the code!
29
Eventos
Posso barrar a propagação de um evento ?
30
Curto circuito
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.
32
Show me the code !
33
Show me the code !
34
Eventos
E se eu tiver muitos listeners ?
35
Eventos
● Agrupe através de um “AggregateListener”
36
Show me the code !
37
Show me the code !
38
Eventos
Eventos disparados pelo MVC
39
Eventos
BOOTSTRAP
● Tratamento da requisição● Valida rota disponível● Mapeia controller/action
ROUTE DISPATCH RENDER
DISPATCH_ERROR
FINISH
RENDER_ERROR
● Instancia a controller● Executa a action
● Renderiza a view● Disparado após a renderização da view
● Inicializa o MVC
40
Serviços
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
42
Serviços
Como funcionam ?
43
Definir um serviço
44
Serviços
● Através do método “setService()”
● Através do arquivo de configuração do modulo
“module.config.php”
● Chave “service_manager”.
45
Show me the code !
46
Show me the code !
47
Obtendo um serviço
48
Serviços
● Através do método get()
● ServiceManager disponível na Controller.
49
Show me the code !
50
Serviços
Onde devo registrar meus serviços ?
51
Serviços
● module.config.php
● Chave:
“service_manager”
52
Serviços
Tipos de serviços
53
Invokables
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.
55
Show me the code !
56
Show me the code !
57
Factories
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”
59
Show me the code !
60
Show me the code !
61
Show me the code !
62
Closure no config.module.php
63
Warning !
● Não utilize closures no arquivo de configuração
● Inviabiliza use de cache
● Este arquivo deve ter configuração !
64
Show me the code !
65
Show me the code !
66
Initializers
67
Serviços
● Inicializa serviço do tipo “Invokable”
● Injetar dependências
● Útil quando se tem vários serviços com uma
dependência em comum.
68
Show me the code !
69
Show me the code !
70
Show me the code !
71
Serviços
Porque utilizar serviços ?
72
Serviços
● Use serviços para injetar dependências
● Obter models em controllers
● Evitar herança e diminuir acoplamento.
73
Perguntas ?