trabalhando com eventos e serviços no zend framework 2

74

Upload: william-felipe

Post on 19-Jul-2015

460 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Trabalhando com eventos e serviços no Zend Framework 2
Page 2: Trabalhando com eventos e serviços no Zend Framework 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

Page 3: Trabalhando com eventos e serviços no Zend Framework 2

3

Eventos e Serviços no ZF2

Page 4: Trabalhando com eventos e serviços no Zend Framework 2

4

Introdução ao ZF2

Modular

Eventos Serviços IoCDependency Injection

Composição Vs Herança

DesacoplamentoDesacoplamento PubSub

SubjectObserver

Escalabilidade

Page 5: Trabalhando com eventos e serviços no Zend Framework 2

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

Page 6: Trabalhando com eventos e serviços no Zend Framework 2

6

Eventos

Como funcionam ?

Page 7: Trabalhando com eventos e serviços no Zend Framework 2

7

Listeners

Page 8: Trabalhando com eventos e serviços no Zend Framework 2

8

Listeners

● Qualquer tipo de “invokables” atrelado a um

evento

● “EventManager::attach()”

Page 9: Trabalhando com eventos e serviços no Zend Framework 2

9

Triggers

Page 10: Trabalhando com eventos e serviços no Zend Framework 2

10

Triggers

● Dispara um evento.

● EventManager::trigger()

Page 11: Trabalhando com eventos e serviços no Zend Framework 2

11

Show me the code !

Page 12: Trabalhando com eventos e serviços no Zend Framework 2

12

Eventos

Porque utilizar eventos ?

Page 13: Trabalhando com eventos e serviços no Zend Framework 2

13

Eventos

● Comunicação entre módulos

● Executar rotinas não relacionadas a classe

● Tratar o comportamento do framework

Page 14: Trabalhando com eventos e serviços no Zend Framework 2

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 ?

Page 15: Trabalhando com eventos e serviços no Zend Framework 2

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 ?

Page 16: Trabalhando com eventos e serviços no Zend Framework 2

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

Page 17: Trabalhando com eventos e serviços no Zend Framework 2

17

Eventos

Onde registrar listeners ?

Page 18: Trabalhando com eventos e serviços no Zend Framework 2

18

Eventos

● Classe Module

● Método onBootstrap()

Page 19: Trabalhando com eventos e serviços no Zend Framework 2

19

Show me the code !

Page 20: Trabalhando com eventos e serviços no Zend Framework 2

20

Eventos

O que é o SharedEventManager ?

Page 21: Trabalhando com eventos e serviços no Zend Framework 2

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()”

Page 22: Trabalhando com eventos e serviços no Zend Framework 2

22

Show me the code !

Page 23: Trabalhando com eventos e serviços no Zend Framework 2

23

Show me the code !

Page 24: Trabalhando com eventos e serviços no Zend Framework 2

24

Eventos

E se eu tiver mais de um listener para um evento?

Page 25: Trabalhando com eventos e serviços no Zend Framework 2

25

Quem “chega” primeiro ?

Page 26: Trabalhando com eventos e serviços no Zend Framework 2

26

Eventos

Na ordem que foram registrados, ou..

Page 27: Trabalhando com eventos e serviços no Zend Framework 2

27

Eventos

● Defina prioridades

● Ultimo parâmetro

● Maior o numero, mais

tarde é executado.

● Padrão é 1

Page 28: Trabalhando com eventos e serviços no Zend Framework 2

28

Show me the code!

Page 29: Trabalhando com eventos e serviços no Zend Framework 2

29

Eventos

Posso barrar a propagação de um evento ?

Page 30: Trabalhando com eventos e serviços no Zend Framework 2

30

Curto circuito

Page 31: Trabalhando com eventos e serviços no Zend Framework 2

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.

Page 32: Trabalhando com eventos e serviços no Zend Framework 2

32

Show me the code !

Page 33: Trabalhando com eventos e serviços no Zend Framework 2

33

Show me the code !

Page 34: Trabalhando com eventos e serviços no Zend Framework 2

34

Eventos

E se eu tiver muitos listeners ?

Page 35: Trabalhando com eventos e serviços no Zend Framework 2

35

Eventos

● Agrupe através de um “AggregateListener”

Page 36: Trabalhando com eventos e serviços no Zend Framework 2

36

Show me the code !

Page 37: Trabalhando com eventos e serviços no Zend Framework 2

37

Show me the code !

Page 38: Trabalhando com eventos e serviços no Zend Framework 2

38

Eventos

Eventos disparados pelo MVC

Page 39: Trabalhando com eventos e serviços no Zend Framework 2

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

Page 40: Trabalhando com eventos e serviços no Zend Framework 2

40

Serviços

Page 41: Trabalhando com eventos e serviços no Zend Framework 2

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

Page 42: Trabalhando com eventos e serviços no Zend Framework 2

42

Serviços

Como funcionam ?

Page 43: Trabalhando com eventos e serviços no Zend Framework 2

43

Definir um serviço

Page 44: Trabalhando com eventos e serviços no Zend Framework 2

44

Serviços

● Através do método “setService()”

● Através do arquivo de configuração do modulo

“module.config.php”

● Chave “service_manager”.

Page 45: Trabalhando com eventos e serviços no Zend Framework 2

45

Show me the code !

Page 46: Trabalhando com eventos e serviços no Zend Framework 2

46

Show me the code !

Page 47: Trabalhando com eventos e serviços no Zend Framework 2

47

Obtendo um serviço

Page 48: Trabalhando com eventos e serviços no Zend Framework 2

48

Serviços

● Através do método get()

● ServiceManager disponível na Controller.

Page 49: Trabalhando com eventos e serviços no Zend Framework 2

49

Show me the code !

Page 50: Trabalhando com eventos e serviços no Zend Framework 2

50

Serviços

Onde devo registrar meus serviços ?

Page 51: Trabalhando com eventos e serviços no Zend Framework 2

51

Serviços

● module.config.php

● Chave:

“service_manager”

Page 52: Trabalhando com eventos e serviços no Zend Framework 2

52

Serviços

Tipos de serviços

Page 53: Trabalhando com eventos e serviços no Zend Framework 2

53

Invokables

Page 54: Trabalhando com eventos e serviços no Zend Framework 2

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.

Page 55: Trabalhando com eventos e serviços no Zend Framework 2

55

Show me the code !

Page 56: Trabalhando com eventos e serviços no Zend Framework 2

56

Show me the code !

Page 57: Trabalhando com eventos e serviços no Zend Framework 2

57

Factories

Page 58: Trabalhando com eventos e serviços no Zend Framework 2

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”

Page 59: Trabalhando com eventos e serviços no Zend Framework 2

59

Show me the code !

Page 60: Trabalhando com eventos e serviços no Zend Framework 2

60

Show me the code !

Page 61: Trabalhando com eventos e serviços no Zend Framework 2

61

Show me the code !

Page 62: Trabalhando com eventos e serviços no Zend Framework 2

62

Closure no config.module.php

Page 63: Trabalhando com eventos e serviços no Zend Framework 2

63

Warning !

● Não utilize closures no arquivo de configuração

● Inviabiliza use de cache

● Este arquivo deve ter configuração !

Page 64: Trabalhando com eventos e serviços no Zend Framework 2

64

Show me the code !

Page 65: Trabalhando com eventos e serviços no Zend Framework 2

65

Show me the code !

Page 66: Trabalhando com eventos e serviços no Zend Framework 2

66

Initializers

Page 67: Trabalhando com eventos e serviços no Zend Framework 2

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.

Page 68: Trabalhando com eventos e serviços no Zend Framework 2

68

Show me the code !

Page 69: Trabalhando com eventos e serviços no Zend Framework 2

69

Show me the code !

Page 70: Trabalhando com eventos e serviços no Zend Framework 2

70

Show me the code !

Page 71: Trabalhando com eventos e serviços no Zend Framework 2

71

Serviços

Porque utilizar serviços ?

Page 72: Trabalhando com eventos e serviços no Zend Framework 2

72

Serviços

● Use serviços para injetar dependências

● Obter models em controllers

● Evitar herança e diminuir acoplamento.

Page 73: Trabalhando com eventos e serviços no Zend Framework 2

73

Perguntas ?

Page 74: Trabalhando com eventos e serviços no Zend Framework 2

74

Obrigado !

[email protected]://br.linkedin.com/in/williamfelipewelter/