5 exemples de la meilleure utilisation de Ruby
Vous êtes-vous déjà demandé ce que l'on pouvait faire avec Ruby ? Eh bien, le ciel est probablement la limite, mais nous sommes heureux de parler de quelques cas plus ou moins connus...
Pub/Sub peut apporter de nombreux avantages au projet - il peut rendre le code propre, découpler les services et les rendre facilement évolutifs. Apprenez-en plus sur Pub/Sub dans l'article suivant et faites évoluer votre projet !
Ruby on Rails (Rails, RoR) est un framework d'application web bien connu, écrit en langage Rubis langage de programmation. Pub/Sub est un nom abrégé des modèles de conception de logiciels appelés Publier-abonner. Je vais expliquer comment la communication entre les composants logiciels dans Rails pourrait être gérée par Pub/Sub.
Pub/sub est un modèle de conception logicielle permettant la communication entre services. Service
implique l'un des deux rôles suivants : éditeur (qui produit) ou récepteur (qui consomme). Qu'est-ce qui est
Le produit à consommer est déterminé comme un événement, un message ou une notification. Dans le
Dans le contexte de cet article, ces termes sont utilisés de manière interchangeable pour désigner la même chose.
Le service qui produit ne sait pas qui consomme. Le service qui consomme ne sait pas
connaître l'origine du message. Ils peuvent rester inconnus l'un de l'autre. C'est différent de
les files d'attente de messages, où le composant qui envoie le message connaît souvent sa destination
- ce type de messagerie permet d'envoyer des messages n'importe où. Ce mécanisme est un élément central de la
de Pub/sub et cela signifie qu'ils sont découplés.
Pour exprimer leurs intérêts mutuels, ils doivent partager une compréhension commune. C'est pourquoi,
les deux rôles ont un mécanisme implicite du bâton où le producteur d'un message et le destinataire de ce message ont un rôle à jouer.
consommateur du message rencontré. Ce mécanisme est appelé sujet, abonnement ou thème. Il est
chargé de classer les messages en fonction des sujets, il s'agit essentiellement d'un filtre de messages sans état.
Les thèmes agissent comme des stations de diffusion. Un éditeur produit le message pour le sujet,
reçoivent immédiatement le message du sujet. En raison du découplage des
la manière la plus efficace d'échanger des messages est de les traiter de manière asynchrone.
Par défaut, il n'y a pas de surcharge Rails pour les modèles de conception de logiciels pour le passage de messages entre les composants. Les développeurs utilisent des la programmation orientée objet (OOP) : passer des paramètres aux fonctions, demander des classes sur les valeurs.
Lorsque l'application est relativement simple, cela peut suffire. Lorsque l'application se développe, par exemple, certaines opérations doivent être effectuées de manière asynchrone, alors l'option projet a besoin d'une abstraction qui résout ce flux de données. Plutôt que de réinventer la roue, les développeurs peuvent mettre en œuvre le système Pub/sub pour combler ce manque d'abstraction.
Les exemples de sources dans Rails ont été écrits à l'aide de la bibliothèque
Pub/Sub sur Rails (dans la nomenclature Ruby, une bibliothèque est appelée gem) : Vous trouverez plus de détails dans le readme de la gem. L'implémentation est composée de modules :
Décrit la logique d'entreprise afin de fournir un contexte pour Pub/Sub et, par conséquent, de rendre propre la logique d'entreprise. code.
module Notifications
extend PubSub::Domaine
fin
module Rapports
extend PubSub::Domaine
fin
Il s'agit d'une classe qui décrit ce qui s'est passé. Le nom de la classe doit décrire lui-même ce qui s'est passé, par exemple : annulé, modifié, créé, détruit, envoyé, mis à jour. Les noms d'événements peuvent ressembler à ce qui suit : ProfitAndLossStatementCreatedEvent, qui signifie qu'un état financier a été créé.
class Reports::ProfitAndLossStatementCreatedEvent < PubSub::DomainEvent
attribut :profit_and_loss_statement_id, Types::Strict::Integer
end
Classe capable d'émettre des événements. L'exemple montre la création d'un rapport de service. Lorsque le rapport a été créé avec succès, l'événement de création de ce rapport est émis.
class Reports::ProfitAndLossStatementService
include PubSub::Emit
def execute
emit(:report_profit_and_loss_statement_created, profit_and_loss_statement_id : id) if result.ok ?
end
end
Cette classe doit être exécutée en réponse au traitement d'un événement.
module Notifications
class ReportsProfitAndLossStatementCreatedHandler < PubSub::DomainEventHandler
def call
ReportMailer.profit_and_loss_statement(profit_and_loss_statement).deliver_now
end
private
def profit_et_loss_statement
ProfitAndLossStatement.find(event_data.profit_and_loss_statement_id)
end
end
end
Les événements sont liés à leurs gestionnaires par le biais d'abonnements.
notifications :
reports__profit_and_loss_statement_created : async
Pub/sub n'est pas une approche courante dans Ruby in Rails. Comme présenté dans l'article, ce modèle peut apporter de nombreux avantages au projet - il peut rendre le code propre, découpler les services et les rendre facilement évolutifs.