Trabalhando com eventos e serviços no Zend Framework 2

Preview:

Citation preview

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 ?

74

Obrigado !

william.welter@4linux.com.brhttp://br.linkedin.com/in/williamfelipewelter/