﻿1
00:00:01,120 --> 00:00:03,120
‫Instrutor: Neste vídeo e

2
00:00:03,120 --> 00:00:06,030
‫no próximo, vamos mergulhar em mais uma parte

3
00:00:06,030 --> 00:00:08,870
‫importante da arquitetura Node JS com eventos

4
00:00:08,870 --> 00:00:11,093
‫JS e arquitetura orientada a eventos.

5
00:00:12,370 --> 00:00:15,210
‫Portanto, a maioria dos módulos principais do Node,

6
00:00:15,210 --> 00:00:19,780
‫como os que já usamos, como HTTP, File System e Timers, são construídos

7
00:00:19,780 --> 00:00:23,200
‫em torno de uma arquitetura orientada a eventos e,

8
00:00:23,200 --> 00:00:25,830
‫é claro, também podemos usar essa

9
00:00:25,830 --> 00:00:28,720
‫arquitetura a nosso favor em nosso próprio código.

10
00:00:28,720 --> 00:00:31,910
‫E o conceito é bastante simples.

11
00:00:31,910 --> 00:00:34,780
‫Portanto, no Node, existem certos objetos chamados

12
00:00:34,780 --> 00:00:37,843
‫emissores de eventos que emitem eventos nomeados assim

13
00:00:37,843 --> 00:00:41,520
‫que algo importante acontece no aplicativo, como uma solicitação

14
00:00:41,520 --> 00:00:45,360
‫que atinge o servidor, ou um temporizador expirando, ou um

15
00:00:45,360 --> 00:00:47,660
‫arquivo terminando de ler.

16
00:00:47,660 --> 00:00:51,030
‫Esses eventos podem então ser captados por ouvintes de

17
00:00:51,030 --> 00:00:54,380
‫eventos que nós, desenvolvedores, configuramos, que irão disparar

18
00:00:54,380 --> 00:00:58,870
‫funções de retorno de chamada que são anexadas a cada ouvinte, certo.

19
00:00:58,870 --> 00:01:02,150
‫Portanto, novamente, por um lado, temos emissores de

20
00:01:02,150 --> 00:01:05,470
‫eventos e, por outro lado, ouvintes de eventos que reagirão

21
00:01:05,470 --> 00:01:08,940
‫aos eventos emitidos chamando a função de retorno de chamada.

22
00:01:08,940 --> 00:01:10,540
‫Simples, certo?

23
00:01:10,540 --> 00:01:12,900
‫E provavelmente a melhor maneira de entender

24
00:01:12,900 --> 00:01:14,630
‫isso é examinar um exemplo.

25
00:01:14,630 --> 00:01:17,760
‫Portanto, vamos entender brevemente como o Node

26
00:01:17,760 --> 00:01:21,330
‫usa a arquitetura orientada a eventos para lidar com as

27
00:01:21,330 --> 00:01:25,950
‫solicitações do servidor no módulo HTTP que já usamos em outra seção.

28
00:01:25,950 --> 00:01:28,600
‫Portanto, quando queremos criar um servidor,

29
00:01:28,600 --> 00:01:30,384
‫usamos o método Create

30
00:01:30,384 --> 00:01:33,900
‫Server e salvamos em uma variável de servidor.

31
00:01:33,900 --> 00:01:36,260
‫Esta implementação aqui é um pouco

32
00:01:36,260 --> 00:01:40,270
‫diferente do que fizemos antes, mas funciona exatamente da mesma maneira.

33
00:01:40,270 --> 00:01:44,040
‫Enfim, este servidor. on method é como

34
00:01:44,040 --> 00:01:49,040
‫realmente criamos um ouvinte e, neste caso, para o evento "request".

35
00:01:49,070 --> 00:01:51,390
‫Então, digamos que nosso servidor esteja

36
00:01:51,390 --> 00:01:53,770
‫em execução e uma nova solicitação seja feita.

37
00:01:53,770 --> 00:01:57,410
‫O servidor atua como um emissor e emitirá automaticamente

38
00:01:57,410 --> 00:02:01,220
‫um evento denominado "solicitação" cada vez que uma solicitação

39
00:02:01,220 --> 00:02:02,810
‫chegar ao servidor.

40
00:02:02,810 --> 00:02:04,350
‫Simples, certo?

41
00:02:04,350 --> 00:02:07,100
‫Então, como já temos um ouvinte

42
00:02:07,100 --> 00:02:10,830
‫configurado para esse evento exato, a função de retorno de

43
00:02:10,830 --> 00:02:14,000
‫chamada que anexamos a esse ouvinte será chamada automaticamente.

44
00:02:14,000 --> 00:02:16,780
‫E esse tipo de função que já conhecemos

45
00:02:16,780 --> 00:02:20,040
‫antes, ela simplesmente enviará alguns dados de volta para o cliente.

46
00:02:20,040 --> 00:02:22,970
‫Agora, funciona assim porque nos bastidores o servidor

47
00:02:22,970 --> 00:02:26,074
‫é na verdade uma instância da classe Node

48
00:02:26,074 --> 00:02:28,980
‫JS EventEmitter, então ele herda toda essa

49
00:02:28,980 --> 00:02:32,500
‫lógica de emissão e escuta de evento dessa classe

50
00:02:32,500 --> 00:02:35,410
‫EventEmitter e não se preocupe, vamos usar

51
00:02:35,410 --> 00:02:38,410
‫tudo certo no próximo vídeo, para que você

52
00:02:38,410 --> 00:02:41,210
‫se familiarize com todas essas lógicas.

53
00:02:41,210 --> 00:02:43,340
‫Agora, só para terminar esta aula,

54
00:02:43,340 --> 00:02:46,800
‫acredito que seja importante mencionar que esta lógica EventEmitter

55
00:02:46,800 --> 00:02:49,960
‫é chamada de Padrão Observer na programação Javascript

56
00:02:49,960 --> 00:02:53,160
‫em geral, e é um padrão bastante popular com

57
00:02:53,160 --> 00:02:54,740
‫muitos casos usados.

58
00:02:54,740 --> 00:02:57,090
‫Então a ideia é colocar lá

59
00:02:57,090 --> 00:03:00,370
‫um observador, neste caso o ouvinte de evento, que

60
00:03:00,370 --> 00:03:03,450
‫fica esperando, continua observando o sujeito que acabará por

61
00:03:03,450 --> 00:03:06,486
‫emitir o evento que o ouvinte está esperando.

62
00:03:06,486 --> 00:03:09,680
‫E o oposto desse padrão são simplesmente funções

63
00:03:09,680 --> 00:03:12,370
‫chamando outras funções, algo com o qual

64
00:03:12,370 --> 00:03:14,530
‫estamos mais acostumados, certo?

65
00:03:14,530 --> 00:03:16,490
‫Mas o padrão do observador

66
00:03:16,490 --> 00:03:19,020
‫foi projetado para reagir em vez de chamar.

67
00:03:19,020 --> 00:03:22,330
‫E isso porque há um grande benefício em usar

68
00:03:22,330 --> 00:03:25,248
‫essa arquitetura, que é o fato de

69
00:03:25,248 --> 00:03:27,420
‫que tudo é mais desacoplado.

70
00:03:27,420 --> 00:03:30,340
‫Não temos, por exemplo, funções do módulo

71
00:03:30,340 --> 00:03:33,610
‫File System chamando funções do módulo HTTP porque

72
00:03:33,610 --> 00:03:35,770
‫seria uma grande bagunça.

73
00:03:35,770 --> 00:03:38,690
‫Em vez disso, esses módulos são bem desacoplados

74
00:03:38,690 --> 00:03:41,470
‫e autocontidos, cada um emitindo eventos aos

75
00:03:41,470 --> 00:03:44,380
‫quais outras funções, mesmo que venham de outros

76
00:03:44,380 --> 00:03:46,120
‫módulos, podem responder.

77
00:03:46,120 --> 00:03:49,170
‫Além disso, o uso de uma arquitetura orientada

78
00:03:49,170 --> 00:03:52,390
‫a eventos torna muito mais simples reagir várias vezes

79
00:03:52,390 --> 00:03:53,760
‫ao mesmo evento.

80
00:03:53,760 --> 00:03:58,210
‫Tudo o que precisamos fazer é configurar vários ouvintes, certo?

81
00:03:58,210 --> 00:04:01,760
‫Ok, e essa é a arquitetura orientada a eventos do Node

82
00:04:01,760 --> 00:04:03,020
‫em poucas palavras.

83
00:04:03,020 --> 00:04:06,050
‫E não se preocupe se isso parecer um pouco teórico

84
00:04:06,050 --> 00:04:08,730
‫demais, você verá essa lógica sendo usada em

85
00:04:08,730 --> 00:04:12,183
‫diversas situações ao longo do curso, começando logo no próximo vídeo.

