5 ejemplos del mejor uso de Ruby
¿Te has preguntado alguna vez qué podemos hacer con Ruby? Bueno, el cielo es probablemente el límite, pero estaremos encantados de hablar de algunos casos más o menos conocidos...
Pub/Sub puede aportar muchos beneficios al proyecto - puede hacer que el código sea limpio, desacoplar servicios y hacerlos fácilmente escalables. ¡Obtén más información sobre Pub/Sub en el siguiente artículo y sube de nivel tu proyecto!
Ruby on Rails (Rails, RoR) es un conocido marco de aplicaciones 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.
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.
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 ese flujo de datos. En lugar de reinventar la rueda, los desarrolladores pueden implementar Pub/sub para suplir esta falta de abstracción.
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:
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
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
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
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
Los eventos se vinculan a sus gestores mediante suscripciones.
notificaciones:
reports__profit_and_loss_statement_created: async
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.