SlideShare uma empresa Scribd logo
1 de 74
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
Desacoplamento PubSub Desacoplamento 
4 
Introdução ao ZF2 
Modular 
Eventos Serviços IoC 
Composição Vs Herança 
Dependency Injection 
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 
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
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 ?
74 
Obrigado ! 
william.welter@4linux.com.br 
http://br.linkedin.com/in/williamfelipewelter/

Mais conteúdo relacionado

Mais procurados

Programação defensiva
Programação defensivaProgramação defensiva
Programação defensivaKayo Rayner
 
Programando php com mais segurança
Programando php com mais segurançaProgramando php com mais segurança
Programando php com mais segurançaMichael Douglas
 
Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Luís Cobucci
 
IAsyncResult Pattern ou Asynchronous Programming Model (APM)
IAsyncResult Pattern ou Asynchronous Programming Model (APM)IAsyncResult Pattern ou Asynchronous Programming Model (APM)
IAsyncResult Pattern ou Asynchronous Programming Model (APM)Rogério Moraes de Carvalho
 
Django - A sua cápsula de soluções web em python
Django - A sua cápsula de soluções web em pythonDjango - A sua cápsula de soluções web em python
Django - A sua cápsula de soluções web em pythonPaula Grangeiro
 
Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...
Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...
Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...Rogério Moraes de Carvalho
 
Android DevConference - Automatizando testes sem sofrimento
Android DevConference - Automatizando testes sem sofrimentoAndroid DevConference - Automatizando testes sem sofrimento
Android DevConference - Automatizando testes sem sofrimentoiMasters
 
Cya grunt.js, hello gulp.js
Cya grunt.js, hello gulp.jsCya grunt.js, hello gulp.js
Cya grunt.js, hello gulp.jsMichael Douglas
 
Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011Luís Cobucci
 
Desenvolvimento baseado em componentes com JSF
Desenvolvimento baseado em componentes com JSFDesenvolvimento baseado em componentes com JSF
Desenvolvimento baseado em componentes com JSFEmmanuel Neri
 
1001 maneiras de debugar o WordPress
1001 maneiras de debugar o WordPress1001 maneiras de debugar o WordPress
1001 maneiras de debugar o WordPressRudá Almeida
 
Instrumentando aplicações Go com Prometheus
Instrumentando aplicações Go com PrometheusInstrumentando aplicações Go com Prometheus
Instrumentando aplicações Go com PrometheusAndré Carvalho
 

Mais procurados (20)

Programação defensiva
Programação defensivaProgramação defensiva
Programação defensiva
 
Programando php com mais segurança
Programando php com mais segurançaProgramando php com mais segurança
Programando php com mais segurança
 
Igor Oliveira - Puppet
Igor Oliveira - PuppetIgor Oliveira - Puppet
Igor Oliveira - Puppet
 
Java script
Java scriptJava script
Java script
 
Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011
 
Apres s4
Apres s4 Apres s4
Apres s4
 
IAsyncResult Pattern ou Asynchronous Programming Model (APM)
IAsyncResult Pattern ou Asynchronous Programming Model (APM)IAsyncResult Pattern ou Asynchronous Programming Model (APM)
IAsyncResult Pattern ou Asynchronous Programming Model (APM)
 
Django - A sua cápsula de soluções web em python
Django - A sua cápsula de soluções web em pythonDjango - A sua cápsula de soluções web em python
Django - A sua cápsula de soluções web em python
 
Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...
Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...
Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...
 
Burlando Waf 2.0
Burlando Waf  2.0Burlando Waf  2.0
Burlando Waf 2.0
 
burlando um WAF
burlando um WAFburlando um WAF
burlando um WAF
 
Clean code part 2
Clean code   part 2Clean code   part 2
Clean code part 2
 
Android DevConference - Automatizando testes sem sofrimento
Android DevConference - Automatizando testes sem sofrimentoAndroid DevConference - Automatizando testes sem sofrimento
Android DevConference - Automatizando testes sem sofrimento
 
Resumo OpenMP
Resumo OpenMPResumo OpenMP
Resumo OpenMP
 
Cya grunt.js, hello gulp.js
Cya grunt.js, hello gulp.jsCya grunt.js, hello gulp.js
Cya grunt.js, hello gulp.js
 
Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011
 
Desenvolvimento baseado em componentes com JSF
Desenvolvimento baseado em componentes com JSFDesenvolvimento baseado em componentes com JSF
Desenvolvimento baseado em componentes com JSF
 
1001 maneiras de debugar o WordPress
1001 maneiras de debugar o WordPress1001 maneiras de debugar o WordPress
1001 maneiras de debugar o WordPress
 
Vivendo de hacking
Vivendo de hackingVivendo de hacking
Vivendo de hacking
 
Instrumentando aplicações Go com Prometheus
Instrumentando aplicações Go com PrometheusInstrumentando aplicações Go com Prometheus
Instrumentando aplicações Go com Prometheus
 

Destaque

PHP e PostgreSQL - Dois Elefantes trabalham muito mais !
PHP e PostgreSQL - Dois Elefantes trabalham muito mais !PHP e PostgreSQL - Dois Elefantes trabalham muito mais !
PHP e PostgreSQL - Dois Elefantes trabalham muito mais !William Felipe
 
Praticas DevOps Com ZendServer
Praticas DevOps Com ZendServerPraticas DevOps Com ZendServer
Praticas DevOps Com ZendServerWilliam Felipe
 
Deploy continuo com jenkins, codeception e zend server
Deploy continuo com jenkins, codeception e zend serverDeploy continuo com jenkins, codeception e zend server
Deploy continuo com jenkins, codeception e zend serverWilliam Felipe
 
Proteja sua aplicação com o zend framework 2
Proteja sua aplicação com o zend framework 2Proteja sua aplicação com o zend framework 2
Proteja sua aplicação com o zend framework 2Cyrille Grandval
 
Desmistificando o Framework da Zend
Desmistificando o Framework da ZendDesmistificando o Framework da Zend
Desmistificando o Framework da ZendDomingos Teruel
 
Desfrutando os Componentes do Zend Framework
Desfrutando os Componentes do Zend FrameworkDesfrutando os Componentes do Zend Framework
Desfrutando os Componentes do Zend FrameworkFernando Geraldo Mantoan
 
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISCCriando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISCFlávio Lisboa
 
Entendendo a Arquitetura MVC do Zend Framework
Entendendo a Arquitetura MVC do Zend FrameworkEntendendo a Arquitetura MVC do Zend Framework
Entendendo a Arquitetura MVC do Zend FrameworkGedvan Dias
 
Desenvolvendo Aplicações com Zend Framework
Desenvolvendo Aplicações com Zend FrameworkDesenvolvendo Aplicações com Zend Framework
Desenvolvendo Aplicações com Zend FrameworkDomingos Teruel
 

Destaque (9)

PHP e PostgreSQL - Dois Elefantes trabalham muito mais !
PHP e PostgreSQL - Dois Elefantes trabalham muito mais !PHP e PostgreSQL - Dois Elefantes trabalham muito mais !
PHP e PostgreSQL - Dois Elefantes trabalham muito mais !
 
Praticas DevOps Com ZendServer
Praticas DevOps Com ZendServerPraticas DevOps Com ZendServer
Praticas DevOps Com ZendServer
 
Deploy continuo com jenkins, codeception e zend server
Deploy continuo com jenkins, codeception e zend serverDeploy continuo com jenkins, codeception e zend server
Deploy continuo com jenkins, codeception e zend server
 
Proteja sua aplicação com o zend framework 2
Proteja sua aplicação com o zend framework 2Proteja sua aplicação com o zend framework 2
Proteja sua aplicação com o zend framework 2
 
Desmistificando o Framework da Zend
Desmistificando o Framework da ZendDesmistificando o Framework da Zend
Desmistificando o Framework da Zend
 
Desfrutando os Componentes do Zend Framework
Desfrutando os Componentes do Zend FrameworkDesfrutando os Componentes do Zend Framework
Desfrutando os Componentes do Zend Framework
 
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISCCriando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
 
Entendendo a Arquitetura MVC do Zend Framework
Entendendo a Arquitetura MVC do Zend FrameworkEntendendo a Arquitetura MVC do Zend Framework
Entendendo a Arquitetura MVC do Zend Framework
 
Desenvolvendo Aplicações com Zend Framework
Desenvolvendo Aplicações com Zend FrameworkDesenvolvendo Aplicações com Zend Framework
Desenvolvendo Aplicações com Zend Framework
 

Semelhante a Trabalhando com eventos e serviços no Zend Framework 2

JHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosJHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosThiago Soares
 
TDC2018FLN | Trilha Arquitetura - Elixir Umbrella - Aplicacoes desacopladas s...
TDC2018FLN | Trilha Arquitetura - Elixir Umbrella - Aplicacoes desacopladas s...TDC2018FLN | Trilha Arquitetura - Elixir Umbrella - Aplicacoes desacopladas s...
TDC2018FLN | Trilha Arquitetura - Elixir Umbrella - Aplicacoes desacopladas s...tdc-globalcode
 
Um novo modelo de implantação do SEI no governo
Um novo modelo de implantação do SEI no governoUm novo modelo de implantação do SEI no governo
Um novo modelo de implantação do SEI no governoinstructbr
 
Aula Introdução a VRaptor 4 - Pós Java UTFPR
Aula Introdução a VRaptor 4 - Pós Java UTFPRAula Introdução a VRaptor 4 - Pós Java UTFPR
Aula Introdução a VRaptor 4 - Pós Java UTFPRAndré Luiz Forchesatto
 
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAcelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAmazon Web Services LATAM
 
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1Giovanni Bassi
 
Pense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkPense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkFlávio Lisboa
 
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...tdc-globalcode
 
Workshop anypoint service mesh
Workshop   anypoint service meshWorkshop   anypoint service mesh
Workshop anypoint service meshRenato de Oliveira
 
AutomaçãoWeb - Chaordic Academy
AutomaçãoWeb - Chaordic AcademyAutomaçãoWeb - Chaordic Academy
AutomaçãoWeb - Chaordic AcademyFausto Siqueira
 
Android Core Aula 7 - Aplicações (Services, Broadcast Receivers, NDK/JNI)
Android Core Aula 7 - Aplicações (Services, Broadcast Receivers, NDK/JNI)Android Core Aula 7 - Aplicações (Services, Broadcast Receivers, NDK/JNI)
Android Core Aula 7 - Aplicações (Services, Broadcast Receivers, NDK/JNI)Felipe Silveira
 
ASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre TarifaASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre Tarifaguestea329c
 

Semelhante a Trabalhando com eventos e serviços no Zend Framework 2 (20)

JHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosJHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãos
 
TDC2018FLN | Trilha Arquitetura - Elixir Umbrella - Aplicacoes desacopladas s...
TDC2018FLN | Trilha Arquitetura - Elixir Umbrella - Aplicacoes desacopladas s...TDC2018FLN | Trilha Arquitetura - Elixir Umbrella - Aplicacoes desacopladas s...
TDC2018FLN | Trilha Arquitetura - Elixir Umbrella - Aplicacoes desacopladas s...
 
Enterprise php
Enterprise phpEnterprise php
Enterprise php
 
Um novo modelo de implantação do SEI no governo
Um novo modelo de implantação do SEI no governoUm novo modelo de implantação do SEI no governo
Um novo modelo de implantação do SEI no governo
 
Apresentacao dev ops
Apresentacao dev opsApresentacao dev ops
Apresentacao dev ops
 
Secomp 2018 - DO Ruby ao Elixir
Secomp 2018 - DO Ruby ao ElixirSecomp 2018 - DO Ruby ao Elixir
Secomp 2018 - DO Ruby ao Elixir
 
Aula Introdução a VRaptor 4 - Pós Java UTFPR
Aula Introdução a VRaptor 4 - Pós Java UTFPRAula Introdução a VRaptor 4 - Pós Java UTFPR
Aula Introdução a VRaptor 4 - Pós Java UTFPR
 
Curso AngularJS - Parte 1
Curso AngularJS - Parte 1Curso AngularJS - Parte 1
Curso AngularJS - Parte 1
 
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAcelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
 
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
 
Pense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkPense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend Framework
 
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
 
Django
DjangoDjango
Django
 
Google Web Toolkit
Google Web ToolkitGoogle Web Toolkit
Google Web Toolkit
 
Workshop anypoint service mesh
Workshop   anypoint service meshWorkshop   anypoint service mesh
Workshop anypoint service mesh
 
AutomaçãoWeb - Chaordic Academy
AutomaçãoWeb - Chaordic AcademyAutomaçãoWeb - Chaordic Academy
AutomaçãoWeb - Chaordic Academy
 
Android Core Aula 7 - Aplicações (Services, Broadcast Receivers, NDK/JNI)
Android Core Aula 7 - Aplicações (Services, Broadcast Receivers, NDK/JNI)Android Core Aula 7 - Aplicações (Services, Broadcast Receivers, NDK/JNI)
Android Core Aula 7 - Aplicações (Services, Broadcast Receivers, NDK/JNI)
 
Palestra ASP.NET MVC
Palestra ASP.NET MVCPalestra ASP.NET MVC
Palestra ASP.NET MVC
 
ASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre TarifaASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre Tarifa
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 

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
  • 3. 3 Eventos e Serviços no ZF2
  • 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
  • 6. 6 Eventos Como funcionam ?
  • 8. 8 Listeners ● Qualquer tipo de “invokables” atrelado a um evento ● “EventManager::attach()”
  • 10. 10 Triggers ● Dispara um evento. ● EventManager::trigger()
  • 11. 11 Show me the code !
  • 12. 12 Eventos Porque utilizar eventos ?
  • 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”.
  • 17. 17 Eventos Onde registrar listeners ?
  • 18. 18 Eventos ● Classe Module ● Método onBootstrap()
  • 19. 19 Show me the code !
  • 20. 20 Eventos O que é o SharedEventManager ?
  • 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()”
  • 22. 22 Show me the code !
  • 23. 23 Show me the code !
  • 24. 24 Eventos E se eu tiver mais de um listener para um evento?
  • 25. 25 Quem “chega” primeiro ?
  • 26. 26 Eventos Na ordem que foram registrados, ou..
  • 27. 27 Eventos ● Defina prioridades ● Ultimo parâmetro ● Maior o numero, mais tarde é executado. ● Padrão é 1
  • 28. 28 Show me the code!
  • 29. 29 Eventos Posso barrar a propagação de um evento ?
  • 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.
  • 32. 32 Show me the code !
  • 33. 33 Show me the code !
  • 34. 34 Eventos E se eu tiver muitos listeners ?
  • 35. 35 Eventos ● Agrupe através de um “AggregateListener”
  • 36. 36 Show me the code !
  • 37. 37 Show me the code !
  • 38. 38 Eventos Eventos disparados pelo MVC
  • 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
  • 42. 42 Serviços Como funcionam ?
  • 43. 43 Definir um serviço
  • 44. 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. 45 Show me the code !
  • 46. 46 Show me the code !
  • 47. 47 Obtendo um serviço
  • 48. 48 Serviços ● Através do método get() ● ServiceManager disponível na Controller.
  • 49. 49 Show me the code !
  • 50. 50 Serviços Onde devo registrar meus serviços ?
  • 51. 51 Serviços ● module.config.php ● Chave: “service_manager”
  • 52. 52 Serviços Tipos de serviços
  • 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.
  • 55. 55 Show me the code !
  • 56. 56 Show me the code !
  • 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”
  • 59. 59 Show me the code !
  • 60. 60 Show me the code !
  • 61. 61 Show me the code !
  • 62. 62 Closure no config.module.php
  • 63. 63 Warning ! ● Não utilize closures no arquivo de configuração ● Inviabiliza use de cache ● Este arquivo deve ter configuração !
  • 64. 64 Show me the code !
  • 65. 65 Show me the code !
  • 67. 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. 68 Show me the code !
  • 69. 69 Show me the code !
  • 70. 70 Show me the code !
  • 71. 71 Serviços Porque utilizar serviços ?
  • 72. 72 Serviços ● Use serviços para injetar dependências ● Obter models em controllers ● Evitar herança e diminuir acoplamento.
  • 74. 74 Obrigado ! william.welter@4linux.com.br http://br.linkedin.com/in/williamfelipewelter/