5 παραδείγματα της καλύτερης χρήσης της Ruby
Αναρωτηθήκατε ποτέ τι μπορούμε να κάνουμε με τη Ruby; Λοιπόν, ο ουρανός είναι μάλλον το όριο, αλλά είμαστε στην ευχάριστη θέση να μιλήσουμε για μερικές περισσότερο ή λιγότερο γνωστές περιπτώσεις...

Το Pub/Sub μπορεί να αποφέρει πολλά οφέλη στο έργο - μπορεί να κάνει τον κώδικα καθαρό, να αποσυνδέσει τις υπηρεσίες και να τις κάνει εύκολα επεκτάσιμες. Μάθετε περισσότερα για το Pub/Sub στο παρακάτω άρθρο και ανεβάστε το έργο σας επίπεδο!
Ruby on Rails (Rails, RoR) είναι ένα πολύ γνωστό πλαίσιο εφαρμογών ιστού γραμμένο σε Ruby γλώσσα προγραμματισμού. Pub/Sub είναι μια σύντομη ονομασία των προτύπων σχεδίασης λογισμικού που ονομάζονται Δημοσίευση-συνδρομή. Θα εξηγήσω πώς η επικοινωνία μεταξύ των συστατικών λογισμικού στο Rails θα μπορούσε να αντιμετωπιστεί από το Pub/Sub.
Pub/sub είναι ένα πρότυπο σχεδίασης λογισμικού που παρέχει επικοινωνία μεταξύ υπηρεσιών. Υπηρεσία
συνεπάγεται έναν από τους δύο ρόλους: εκδότης (που παράγει) ή δέκτης (που καταναλώνει). Τι είναι
που παράγεται προς κατανάλωση προσδιορίζεται ως γεγονός ή μήνυμα ή ειδοποίηση. Στο
πλαίσιο αυτού του άρθρου, χρησιμοποιούνται εναλλακτικά για να αναφερθούν στο ίδιο πράγμα.
Η υπηρεσία που παράγει δεν γνωρίζει ποιος καταναλώνει. Η υπηρεσία που καταναλώνει δεν
να γνωρίζετε την προέλευση του μηνύματος. Μπορούν να παραμείνουν άγνωστοι μεταξύ τους. Διαφέρει από το
ουρές μηνυμάτων, όπου το στοιχείο που στέλνει το μήνυμα συχνά γνωρίζει τον προορισμό του
- αυτό το στυλ ανταλλαγής μηνυμάτων σας επιτρέπει να στέλνετε μηνύματα οπουδήποτε. Αυτός ο μηχανισμός είναι ο πυρήνας
του Pub/sub και αυτό σημαίνει ότι είναι αποσυνδεδεμένες.
Για να εκφράσουν τα κοινά τους συμφέροντα, πρέπει να έχουν κοινή αντίληψη. Ως εκ τούτου,
και οι δύο ρόλοι έχουν έναν σιωπηρό μηχανισμό του stick όπου ο παραγωγός ενός μηνύματος και ο
ο καταναλωτής του μηνύματος συναντάται. Αυτός ο μηχανισμός ονομάζεται θέμα, συνδρομή ή θέμα. Είναι
υπεύθυνη για την κατηγοριοποίηση των μηνυμάτων σε θέματα, είναι ουσιαστικά ένα άπατρις φίλτρο μηνυμάτων.
Τα θέματα λειτουργούν ως σταθμοί εκπομπής. Ένας εκδότης παράγει το μήνυμα στο θέμα,
οι συνδρομητές λαμβάνουν αμέσως το μήνυμα από το θέμα. Λόγω της αποσυνδεδεμένης
υπηρεσίες, ο πιο αποδοτικός τρόπος ανταλλαγής μηνυμάτων είναι η ασύγχρονη διαχείρισή τους.
Από προεπιλογή, δεν υπάρχει επιβάρυνση του Rails για τα πρότυπα σχεδίασης λογισμικού για τη μετάδοση μηνυμάτων μεταξύ στοιχείων. Οι προγραμματιστές χρησιμοποιούν το πρότυπο αντικειμενοστραφής προγραμματισμός (OOP) παράδειγμα: περνώντας παραμέτρους σε συναρτήσεις, ζητώντας κλάσεις σχετικά με τις τιμές.
Όταν η εφαρμογή είναι μάλλον απλή, μπορεί να είναι αρκετή. Όταν η εφαρμογή μεγαλώνει, για παράδειγμα, κάποιες λειτουργίες πρέπει να γίνονται ασύγχρονα, τότε η έργο χρειάζεται αφαίρεση που επιλύει αυτή τη ροή δεδομένων. Αντί να επανεφεύρουν τον τροχό, οι προγραμματιστές μπορούν να υλοποιήσουν Pub/sub για να καλύψει αυτή την έλλειψη αφαίρεσης.
Παραδείγματα του πηγαίου κώδικα στο Rails γράφτηκε χρησιμοποιώντας τη βιβλιοθήκη
Pub/Sub στο Rails (στην ονοματολογία της Ruby, μια βιβλιοθήκη ονομάζεται gem): Θα βρείτε περισσότερες λεπτομέρειες στο readme του gem. Η υλοποίηση αποτελείται από ενότητες:
Περιγράφει την επιχειρησιακή λογική προκειμένου να παρέχει πλαίσιο για Pub/Sub και, ως εκ τούτου, να κάνει καθαρές κωδικός.
ενότητα Ειδοποιήσεις
extend PubSub::Domain
end
ενότητα Αναφορές
extend PubSub::Domain
end
Είναι μια κατηγορία που περιγράφει τι συνέβη. Δηλώστε το όνομα της κλάσης ως αυτοπεριγραφικό με το τι συνέβη όσο το δυνατόν περισσότερο, για παράδειγμα: ακυρώθηκε, άλλαξε, δημιουργήθηκε, καταστράφηκε, στάλθηκε, ενημερώθηκε. Τα ονόματα συμβάντων μπορεί να μοιάζουν με τα εξής: ProfitAndLossStatementCreatedEvent, που σημαίνει ότι δημιουργήθηκε μια οικονομική κατάσταση.
class Reports::ProfitAndLossStatementCreatedEvent < PubSub::DomainEvent
attribute :profit_and_loss_statement_id, Types::Strict::Integer
end
Κλάση ικανή να εκπέμπει συμβάντα. Το παράδειγμα δείχνει τη δημιουργία μιας αναφοράς υπηρεσίας. Όταν η έκθεση δημιουργηθεί με επιτυχία, εκπέμπει το συμβάν της δημιουργίας της εν λόγω έκθεσης.
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
Αυτή η κλάση θα πρέπει να εκτελείται ως απόκριση στο χειρισμό ενός συμβάντος.
ενότητα Ειδοποιήσεις
class ReportsProfitAndLossStatementCreatedHandler < PubSub::DomainEventHandler
def call
ReportMailer.profit_and_loss_statement(profit_and_loss_statement).deliver_now
end
private
def profit_and_loss_statement
ProfitAndLossStatement.find(event_data.profit_and_loss_statement_id)
end
end
end
Τα συμβάντα συνδέονται με τους χειριστές τους μέσω συνδρομών.
ειδοποιήσεις:
report__profit_and_loss_statement_created: async
Η Pub/sub δεν είναι μια συνηθισμένη προσέγγιση στο Ruby in Rails. Όπως παρουσιάζεται στο άρθρο, αυτό το μοτίβο μπορεί να φέρει πολλά οφέλη στο έργο - μπορεί να κάνει τον κώδικα καθαρό, να αποσυνδέσει τις υπηρεσίες και να τις κάνει εύκολα επεκτάσιμες.