5 eksempler på hvordan Ruby kan brukes på best mulig måte
Har du noen gang lurt på hva vi kan gjøre med Ruby? Det er nok ingen grenser, men vi snakker gjerne om noen mer eller mindre kjente tilfeller...
Pub/Sub kan gi prosjektet mange fordeler - det kan gjøre koden ren, frakoble tjenester og gjøre dem enkelt skalerbare. Lær mer om Pub/Sub i denne artikkelen, og løft prosjektet ditt!
Ruby on Rails (Rails, RoR) er et velkjent rammeverk for webapplikasjoner skrevet i Ruby programmeringsspråk. Pub/Sub er et kort navn på programvaredesignmønstre som kalles Publiser-abonnement. Jeg skal forklare hvordan kommunikasjon mellom programvarekomponenter i Rails kan håndteres av Pub/Sub.
Pub/sub er et programvaredesignmønster som muliggjør tjeneste-til-tjeneste-kommunikasjon. Tjeneste
innebærer en av de to rollene: utgiver (som produserer) eller mottaker (som konsumerer). Hva er
som skal konsumeres, bestemmes som en hendelse eller en melding eller et varsel. I
I denne artikkelen brukes de om hverandre for å referere til det samme.
Tjenesten som produserer, vet ikke hvem som forbruker. Tjenesten som forbruker vet ikke
vet hvor meldingen kommer fra. De kan forbli ukjente for hverandre. Det er forskjellig fra
meldingskøer, der komponenten som sender meldingen ofte kjenner destinasjonen
- Denne meldingsformen gjør det mulig å sende meldinger hvor som helst. Denne mekanismen er en sentral
av Pub/sub og det betyr at de er frakoblet.
For å uttrykke sine felles interesser må de ha en felles forståelse. Derfor må de ha en felles forståelse,
Begge rollene har en implisitt mekanisme hvor produsenten av en melding og mottakeren av
forbruker av meldingen møtes. Denne mekanismen kalles emne, abonnement eller topic. Den er
er ansvarlig for å kategorisere meldinger til subjekter, og er i hovedsak et tilstandsløst meldingsfilter.
Emner fungerer som kringkastingsstasjoner. En publisher produserer meldingen til emnet,
abonnenter mottar umiddelbart meldingen fra emnet. På grunn av den frikoblede
tjenester, er den mest effektive måten å utveksle meldinger på å håndtere dem asynkront.
Som standard er det ingen Rails-overhead for programvaredesignmønstre for overføring av meldinger mellom komponenter. Utviklere bruker standard objektorientert programmering (OOP)-paradigmet: Overføring av parametere til funksjoner, spørring etter klasser om verdier.
Når applikasjonen er ganske ukomplisert, kan det være nok. Når applikasjonen vokser, for eksempel når noen operasjoner må utføres asynkront, kan prosjekt trenger en abstraksjon som løser denne dataarbeidsflyten. I stedet for å finne opp hjulet på nytt, kan utviklere implementere Pub/sub for å fylle denne mangelen på abstraksjon.
Eksempler på kildekode i Rails ble skrevet ved hjelp av biblioteket
Pub/Sub på Rails (i Rubys nomenklatur kalles et bibliotek gem): Du finner flere detaljer i gems readme. Implementasjonen består av moduler:
Beskriver forretningslogikk for å gi kontekst for Pub/Sub og dermed gjøre den ren kode.
modul Notifications
extend PubSub::Domain
end
modul Rapporter
extend PubSub::Domain
end
Det er en klasse som beskriver hva som har skjedd. Deklarer klassenavnet så selvbeskrivende med det som skjedde som mulig, for eksempel: kansellert, endret, opprettet, ødelagt, sendt, oppdatert. Hendelsesnavn kan se slik ut: ProfitAndLossStatementCreatedEvent, som betyr at det ble opprettet et regnskap.
class Reports::ProfitAndLossStatementCreatedEvent < PubSub::DomainEvent
attributt :profit_and_loss_statement_id, Types::Strict::Integer
end
Klasse som kan sende ut hendelser. Eksempelet viser oppretting av en tjenesterapport. Når rapporten er opprettet, sendes hendelsen for opprettelse av rapporten ut.
class Reports::ProfitAndLossStatementService
include PubSub::Emit
def execute
emit(:rapport_overskudd_og_tap_oppstilling_opprettet, overskudd_og_tap_oppstilling_id: id) if result.ok?
end
end
Denne klassen skal kjøres som svar på håndtering av en hendelse.
modul Notifications
class ReportsProfitAndLossStatementCreatedHandler < PubSub::DomainEventHandler
def call
ReportMailer.resultat_og_tap_oppstilling(resultat_og_tap_oppstilling).deliver_now
end
private
def resultat_og_tapsoppstilling
ProfitAndLossStatement.find(event_data.profit_and_loss_statement_id)
end
end
end
Hendelser er knyttet til håndtererne sine gjennom abonnementer.
notifications:
rapporter__overskudd_og_underskudd_oppstilling_opprettet: async
Pub/sub er ikke en vanlig tilnærming i Ruby in Rails. Som introdusert i artikkelen, kan dette mønsteret gi mange fordeler for prosjektet - det kan gjøre koden ren, frakoble tjenester og gjøre dem enkelt skalerbare.