‫Instrutor: Neste vídeo e
‫no próximo, vamos mergulhar em mais uma parte
‫importante da arquitetura Node JS com eventos
‫JS e arquitetura orientada a eventos.
‫Portanto, a maioria dos módulos principais do Node,
‫como os que já usamos, como HTTP, File System e Timers, são construídos
‫em torno de uma arquitetura orientada a eventos e,
‫é claro, também podemos usar essa
‫arquitetura a nosso favor em nosso próprio código.
‫E o conceito é bastante simples.
‫Portanto, no Node, existem certos objetos chamados
‫emissores de eventos que emitem eventos nomeados assim
‫que algo importante acontece no aplicativo, como uma solicitação
‫que atinge o servidor, ou um temporizador expirando, ou um
‫arquivo terminando de ler.
‫Esses eventos podem então ser captados por ouvintes de
‫eventos que nós, desenvolvedores, configuramos, que irão disparar
‫funções de retorno de chamada que são anexadas a cada ouvinte, certo.
‫Portanto, novamente, por um lado, temos emissores de
‫eventos e, por outro lado, ouvintes de eventos que reagirão
‫aos eventos emitidos chamando a função de retorno de chamada.
‫Simples, certo?
‫E provavelmente a melhor maneira de entender
‫isso é examinar um exemplo.
‫Portanto, vamos entender brevemente como o Node
‫usa a arquitetura orientada a eventos para lidar com as
‫solicitações do servidor no módulo HTTP que já usamos em outra seção.
‫Portanto, quando queremos criar um servidor,
‫usamos o método Create
‫Server e salvamos em uma variável de servidor.
‫Esta implementação aqui é um pouco
‫diferente do que fizemos antes, mas funciona exatamente da mesma maneira.
‫Enfim, este servidor. on method é como
‫realmente criamos um ouvinte e, neste caso, para o evento "request".
‫Então, digamos que nosso servidor esteja
‫em execução e uma nova solicitação seja feita.
‫O servidor atua como um emissor e emitirá automaticamente
‫um evento denominado "solicitação" cada vez que uma solicitação
‫chegar ao servidor.
‫Simples, certo?
‫Então, como já temos um ouvinte
‫configurado para esse evento exato, a função de retorno de
‫chamada que anexamos a esse ouvinte será chamada automaticamente.
‫E esse tipo de função que já conhecemos
‫antes, ela simplesmente enviará alguns dados de volta para o cliente.
‫Agora, funciona assim porque nos bastidores o servidor
‫é na verdade uma instância da classe Node
‫JS EventEmitter, então ele herda toda essa
‫lógica de emissão e escuta de evento dessa classe
‫EventEmitter e não se preocupe, vamos usar
‫tudo certo no próximo vídeo, para que você
‫se familiarize com todas essas lógicas.
‫Agora, só para terminar esta aula,
‫acredito que seja importante mencionar que esta lógica EventEmitter
‫é chamada de Padrão Observer na programação Javascript
‫em geral, e é um padrão bastante popular com
‫muitos casos usados.
‫Então a ideia é colocar lá
‫um observador, neste caso o ouvinte de evento, que
‫fica esperando, continua observando o sujeito que acabará por
‫emitir o evento que o ouvinte está esperando.
‫E o oposto desse padrão são simplesmente funções
‫chamando outras funções, algo com o qual
‫estamos mais acostumados, certo?
‫Mas o padrão do observador
‫foi projetado para reagir em vez de chamar.
‫E isso porque há um grande benefício em usar
‫essa arquitetura, que é o fato de
‫que tudo é mais desacoplado.
‫Não temos, por exemplo, funções do módulo
‫File System chamando funções do módulo HTTP porque
‫seria uma grande bagunça.
‫Em vez disso, esses módulos são bem desacoplados
‫e autocontidos, cada um emitindo eventos aos
‫quais outras funções, mesmo que venham de outros
‫módulos, podem responder.
‫Além disso, o uso de uma arquitetura orientada
‫a eventos torna muito mais simples reagir várias vezes
‫ao mesmo evento.
‫Tudo o que precisamos fazer é configurar vários ouvintes, certo?
‫Ok, e essa é a arquitetura orientada a eventos do Node
‫em poucas palavras.
‫E não se preocupe se isso parecer um pouco teórico
‫demais, você verá essa lógica sendo usada em
‫diversas situações ao longo do curso, começando logo no próximo vídeo.