Explicar la programación dirigida por eventos en Node.js

Programación impulsada por eventos en Node.js: Node.js hace un uso extensivo de eventos, lo cual es una de las razones detrás de su velocidad en comparación con otras tecnologías similares. Una vez que iniciamos un servidor Node.js, inicializa las variables y funciones y luego escucha la ocurrencia de un evento.

La programación basada en eventos se utiliza para sincronizar la ocurrencia de múltiples eventos y hacer que el programa sea lo más simple posible. Los componentes básicos de un programa dirigido por eventos son:

  • Se llama a una función de devolución de llamada (llamada controlador de eventos) cuando se activa un evento.
  • Un bucle de eventos que escucha los desenstringdores de eventos y llama al controlador de eventos correspondiente para ese evento.

Una función que escucha la activación de un evento se dice que es un ‘Observador’. Se activa cuando ocurre un evento. Node.js proporciona una gama de eventos que ya están integrados. Se puede acceder a estos ‘eventos’ a través del módulo ‘eventos’ y la clase EventEmitter. La mayoría de los módulos incorporados de Node.js heredan de la clase EventEmitter

EventEmitter: EventEmitter es un módulo de Node que permite que los objetos se comuniquen entre sí. El núcleo de la arquitectura asincrónica basada en eventos de Node es EventEmitter. Muchos de los módulos integrados de Node se heredan de EventEmitter.

La idea es simple: los objetos emisores envían eventos con nombre, que desenstringn oyentes que ya se han registrado. Por lo tanto, un objeto emisor tiene dos características clave:

  • Emitir eventos de nombre: La señal de que algo ha sucedido se llama emitir un evento. Un cambio de estado en el objeto emisor suele ser la causa de esta condición.
  • Registro y desregistro de funciones de escucha: Se refiere a la vinculación y desvinculación de las funciones de devolución de llamada con sus eventos correspondientes.

Principios de programación basada en eventos:

  • Un conjunto de funciones para manejar los eventos. Estos pueden ser de bloqueo o de no bloqueo, según la implementación.
  • Vincular funciones registradas a eventos.
  • Cuando se recibe un evento registrado, un bucle de eventos busca nuevos eventos y llama a los controladores de eventos coincidentes.

Implementación: Nombre de archivo: app.js

Javascript

// Import the 'events' module
const events = require('events');
  
// Instantiate an EventEmitter object
const eventEmitter = new events.EventEmitter();
  
// Handler associated with the event
const connectHandler = function connected() {
    console.log('Connection established.');
  
    // Trigger the corresponding event
    eventEmitter.emit('data_received');
}
  
// Binds the event with handler
eventEmitter.on('connection', connectHandler);
  
// Binds the data received
eventEmitter.on(
    'data_received', function () {
        console.log('Data Transfer Successful.');
    });
  
// Trigger the connection event
eventEmitter.emit('connection');
  
console.log("Finish");

El fragmento de código anterior vincula el controlador llamado ‘connectHandler’ con el evento ‘conexión’. La función de devolución de llamada se activa cuando se emite el evento.

Ejecute el archivo app.js con el siguiente comando:

node app.js

Producción:  

Connection established.
Data Transfer Successful.
Finish

Ventajas de la programación dirigida por eventos:

  • Flexibilidad: es más fácil modificar secciones de código cuando sea necesario.
  • Idoneidad para interfaces gráficas: permite al usuario seleccionar herramientas (como botones de radio, etc.) directamente desde la barra de herramientas
  • Simplicidad de programación: admite la codificación predictiva, lo que mejora la experiencia de codificación del programador.
  • Líneas divisorias naturales fáciles de encontrar: las líneas divisorias naturales para la infraestructura de pruebas unitarias son fáciles de encontrar.
  • Una buena manera de modelar sistemas: Método útil para modelar sistemas que deben ser asíncronos y reactivos.
  • Permite programas más interactivos: Permite una programación más interactiva. La programación basada en eventos se usa en casi todas las aplicaciones GUI recientes.
  • Uso de interrupciones de hardware: se puede lograr a través de interrupciones de hardware, lo que reduce el consumo de energía de la computadora.
  • Permite sensores y otro hardware: Simplifica que los sensores y otro hardware se comuniquen con el software.

Desventajas de la programación dirigida por eventos:

  • Complejo: Los programas simples se vuelven innecesariamente complejos.
  • Menos lógico y obvio: el flujo del programa suele ser menos lógico y más obvio
  • Error difícil de encontrar: es difícil depurar un programa controlado por eventos
  • Confuso: Demasiados formularios en un programa pueden ser confusos y/o frustrantes para el programador.
  • Acoplamiento estrecho: el esquema de eventos estará estrechamente acoplado con los consumidores del esquema.
  • Bloqueo: Bloqueo complejo de operaciones.

Relación entre la programación dirigida por eventos y la programación orientada a objetos: podemos combinar la programación orientada a objetos (OOP) y la programación dirigida por eventos (EDP) y usarlas juntas en el mismo fragmento de código.

Cuando se usa OOP con EDP:  

  • Se conservan todos los fundamentos de OOP (encapsulación, herencia y polimorfismo).
  • Los objetos obtienen la capacidad de publicar notificaciones de eventos y suscribirse a notificaciones de eventos de otros objetos.

Cómo distinguir entre OOP con y sin EDP: El flujo de control entre objetos es la distinción entre OOP con y sin EDP. En una llamada de método en programación orientada a objetos sin EDP, el control fluye de un objeto a otro. La función principal de un objeto es llamar a los métodos de otros objetos.

Sin embargo, en la notificación de eventos, el control en OOP con EDP se mueve de un objeto a otro. El objeto se suscribe a las notificaciones de otros objetos, espera las notificaciones de esos objetos, realiza un trabajo basado en la notificación y luego publica sus propias notificaciones.

Publicación traducida automáticamente

Artículo escrito por neeraj26pathak y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *