5 eksempler på den bedste brug af Ruby
Har du nogensinde undret dig over, hvad vi kan gøre med Ruby? Det er nok kun fantasien, der sætter grænser, men vi fortæller gerne om nogle mere eller mindre kendte tilfælde...
Pub/Sub kan give mange fordele til projektet - det kan gøre koden ren, afkoble tjenester og gøre dem let skalerbare. Lær mere om Pub/Sub i den følgende artikel, og få dit projekt op i niveau!
Ruby on Rails (Rails, RoR) er en velkendt ramme til webapplikationer skrevet i Ruby programmeringssprog. Pub/Sub er et kort navn for softwaredesignmønstre kaldet Udgiv-abonnement. Jeg vil forklare, hvordan kommunikation mellem softwarekomponenter i Rails kan håndteres af Pub/Sub.
Pub/sub er et softwaredesignmønster, der giver service-til-service-kommunikation. Service
indebærer en af de to roller: udgiver (som producerer) eller modtager (som forbruger). Hvad er
der skal forbruges, bestemmes som en begivenhed eller en besked eller en notifikation. I
I denne artikel bruges de i flæng om det samme.
Den tjeneste, der producerer, ved ikke, hvem der forbruger. Den tjeneste, der forbruger, ved ikke
kender beskedens oprindelse. De kan forblive ukendte for hinanden. Det er forskelligt fra
beskedkøer, hvor den komponent, der sender beskeden, ofte kender dens destination
- Denne måde at sende beskeder på giver dig mulighed for at sende beskeder hvor som helst. Denne mekanisme er en kerne
af Pub/sub og det betyder, at de er afkoblede.
For at udtrykke deres fælles interesser skal de have en fælles forståelse. Det er derfor,
Begge roller har en implicit stokkemekanisme, hvor producenten af en besked og modtageren af den
forbruger af meddelelsen mødes. Denne mekanisme kaldes emne, abonnement eller topic. Den er
ansvarlig for at kategorisere meddelelser til emner, er det i bund og grund et tilstandsløst meddelelsesfilter.
Emner fungerer som radiostationer. En udgiver producerer beskeden til emnet,
abonnenter modtager straks beskeden fra emnet. På grund af den afkoblede
tjenester, er den mest effektive måde at udveksle beskeder på at håndtere dem asynkront.
Som standard er der ingen Rails-overhead for softwaredesignmønstre til overførsel af beskeder mellem komponenter. Udviklere bruger standard objektorienteret programmering (OOP)-paradigmet: sende parametre til funktioner, bede om klasser om værdier.
Når applikationen er ret ukompliceret, kan det være nok. Når applikationen vokser, skal nogle operationer f.eks. udføres asynkront, og så er projekt har brug for en abstraktion, som løser dette data-workflow. I stedet for at genopfinde hjulet kan udviklere implementere Pub/sub for at udfylde denne mangel på abstraktion.
Eksempler på kilde i Rails blev skrevet ved hjælp af biblioteket
Pub/Sub på Rails (i Rubys nomenklatur kaldes et bibliotek for gem): Du finder flere detaljer i gem'ens readme. Implementeringen er sammensat af moduler:
Beskriver forretningslogik for at give kontekst til Pub/Sub og derfor gøre den ren. Kode.
modul Notifikationer
extend PubSub::Domæne
slutning
modul Rapporter
extend PubSub::Domæne
slut
Det er en klasse, som beskriver, hvad der skete. Erklær klassens navn så selvbeskrivende med det, der skete, som muligt, for eksempel: annulleret, ændret, oprettet, ødelagt, sendt, opdateret. Begivenhedsnavne kan se ud som: ProfitAndLossStatementCreatedEvent, som betyder, at der blev oprettet et årsregnskab.
class Reports::ProfitAndLossStatementCreatedEvent < PubSub::DomainEvent
attribut :profit_and_loss_statement_id, Types::Strict::Integer
end
Klasse, der kan udsende hændelser. Eksemplet viser oprettelse af en servicerapport. Når rapporten er oprettet, udsendes hændelsen for oprettelsen af rapporten.
klasse Reports::ProfitAndLossStatementService
inkluderer PubSub::Emit
def udfør
emit(:report_profit_and_loss_statement_created, profit_and_loss_statement_id: id) if result.ok?
end
end
Denne klasse skal udføres som svar på håndtering af en hændelse.
modul Notifikationer
class ReportsProfitAndLossStatementCreatedHandler < PubSub::DomainEventHandler
def kald
ReportMailer.profit_and_loss_statement(profit_and_loss_statement).deliver_now
slut
privat
def opgørelse_overskud_og_tab
ProfitAndLossStatement.find(event_data.profit_and_loss_statement_id)
slut
end
end
Begivenheder er bundet til deres behandlere gennem abonnementer.
meddelelser:
reports__profit_and_loss_statement_created: async
Pub/sub er ikke en almindelig tilgang i Ruby in Rails. Som introduceret i artiklen kan dette mønster give mange fordele til projektet - det kan gøre koden ren, afkoble tjenester og gøre dem let skalerbare.