(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-5LHNRP9'); thecodest, Autor en The Codest - Página 7 de 9

Ruby en Rieles (Rails, RoR) es un conocido web escrito en el lenguaje de programación Ruby lenguaje de programación. Pub/Sub es un nombre abreviado de los patrones de diseño de software denominados Publicar-suscribir. Voy a explicar cómo la comunicación entre los componentes de software en Rails podría ser manejado por Pub / Sub.

¿Qué es Pub/sub?

Pub/sub es un patrón de diseño de software que proporciona comunicación de servicio a servicio. Servicio
implica uno de los dos papeles: editor (quien produce) o receptor (quien consume). ¿Cuál es
producido para ser consumido se determina como un evento o un mensaje o una notificación. En el
En el contexto de este artículo, se utilizan indistintamente para referirse a lo mismo.
El servicio que produce no sabe quién consume. El servicio que consume no
conocer el origen del mensaje. Pueden permanecer desconocidos entre sí. Es diferente de
colas de mensajes, en las que el componente que envía el mensaje suele conocer su destino
- Este estilo de mensajería permite enviar mensajes a cualquier lugar. Este mecanismo es un núcleo
de Pub/sub y significa que están desacoplados.

Para expresar sus intereses mutuos, deben compartir un entendimiento común. Por tanto,
ambos roles tienen implícito un mecanismo del stick donde el productor de un mensaje y el
consumidor del mensaje se reúnen. Este mecanismo se denomina asunto, suscripción o tema. Es
responsable de categorizar los mensajes a los sujetos, es esencialmente un filtro de mensajes sin estado.
Los temas actúan como emisoras. Un editor produce el mensaje para el tema,
los abonados reciben inmediatamente el mensaje del tema. Debido al desacoplamiento
la forma más eficaz de intercambiar mensajes es hacerlo de forma asíncrona.

Rails sin Pub/Sub

Por defecto, Rails no tiene sobrecarga de patrones de diseño de software para el paso de mensajes entre componentes. Los desarrolladores utilizan el estándar programación orientada a objetos (OOP): pasar parámetros a funciones, pedir clases sobre valores.

Cuando la aplicación es poco complicada, podría ser suficiente. Cuando la aplicación crece, por ejemplo, algunas operaciones deben realizarse de forma asíncrona, entonces el proyecto necesita una abstracción que resuelva que datos flujo de trabajo. En lugar de reinventar la rueda, los desarrolladores pueden implementar Pub/sub para suplir esta falta de abstracción.

Ventajas de Pub/Sub con Rails

Contras de Pub/Sub con Rails

Rails Pub/Sub introducir

Los ejemplos de código fuente en Rails se escribieron utilizando la librería
Pub/Sub en Rails (en la nomenclatura de Ruby, una biblioteca se llama gema): Encontrarás más detalles en el readme de la gema. La implementación se compone de módulos:

  1. Dominio,
  2. Evento,
  3. Controlador de eventos,
  4. Editor del evento,
  5. Suscripción.

Dominio

Describe la lógica de negocio con el fin de proporcionar contexto para Pub/Sub y, por lo tanto, hacer limpio código.

 módulo Notificaciones
   extend PubSub::Dominio
 end
 módulo Reports
   extend PubSub::Dominio
 end

Evento

Es una clase que describe lo sucedido. Declara el nombre de la clase como auto-descriptivo con lo sucedido como sea posible, por ejemplo: cancelado, cambiado, creado, destruido, enviado, actualizado. Los nombres de eventos pueden ser como ProfitAndLossStatementCreatedEvent, que significa que un estado financiero fue creado.

 clase Reports::ProfitAndLossStatementCreatedEvent < PubSub::DomainEvent
   atributo :profit_and_loss_statement_id, Types::Strict::Integer
 fin

Editor del evento

Clase capaz de emitir eventos. El ejemplo muestra la creación de un informe de servicio. Cuando el informe se ha creado correctamente, emite el evento de creación de dicho informe.

clase Reports::ProfitAndLossStatementService
   include PubSub::Emit
    def ejecutar
     emit(:informe_estado_de_ganancias_y_pérdidas_creado, estado_de_ganancias_y_pérdidas_id: id) if result.ok?
   end
 end

Controlador de eventos

Esta clase debe ejecutarse en respuesta a la gestión de un evento.

módulo Notificaciones
 class ReportsProfitAndLossStatementCreatedHandler < PubSub::DomainEventHandler
   def call
     ReportMailer.estado_ganancias_y_pérdidas(estado_ganancias_y_pérdidas).deliver_now
   end

   privado

   def declaración_de_ganancias_y_pérdidas
     ProfitAndLossStatement.find(event_data.profit_and_loss_statement_id)
   end
 end
end

Suscripción

Los eventos se vinculan a sus gestores mediante suscripciones.

notificaciones:
 reports__profit_and_loss_statement_created: async

Ejemplos de casos de uso:

Patrones similares

  1. EventBus - pueden enviar eventos a EventBus sin saber quién los recogerá o cuántos encuestados lo harán. reaccionar,
  2. Observador - el sujeto mantiene una lista de dependientes, llamados observadores, y les notifica cada vez que cambia su estado,
  3. Puesta en común - al sondear, los clientes preguntan periódicamente al sistema si hay nuevos eventos o datos.

Gemas

Resumen

Pub/sub no es un enfoque común en Ruby in Rails. Tal y como se introduce en el artículo, este patrón puede aportar muchos beneficios al proyecto: puede hacer que el código sea limpio, desacoplar servicios y hacerlos fácilmente escalables.

bandera de cooperación
es_ESSpanish