5 exempel på hur Ruby används på bästa sätt
Har du någonsin undrat vad vi kan göra med Ruby? Tja, himlen är förmodligen gränsen, men vi är glada att prata om några mer eller mindre kända fall ...
Pub/Sub kan ge många fördelar för projektet - det kan göra koden ren, frikoppla tjänster och göra dem lätt skalbara. Lär dig mer om Pub/Sub i följande artikel och få ditt projekt att lyfta!
Ruby on Rails (Rails, RoR) är ett välkänt ramverk för webbapplikationer skrivet i Ruby programmeringsspråk. Pub/Sub är ett kort namn på designmönster för programvara som kallas Publicera och prenumerera. Jag ska förklara hur kommunikation mellan programvarukomponenter i Rails kan hanteras med Pub/Sub.
Pub/sub är ett designmönster för programvara som möjliggör kommunikation mellan tjänster. Tjänst
innebär en av de två rollerna: utgivare (som producerar) eller mottagare (som konsumerar). Vad är
som ska konsumeras bestäms som en händelse eller ett meddelande eller en notifiering. I
i denna artikel används de synonymt för att referera till samma sak.
Tjänsten som producerar vet inte vem som konsumerar. Tjänsten som konsumerar vet inte
känna till meddelandets ursprung. De kan förbli okända för varandra. Det skiljer sig från
meddelandeköer, där den komponent som skickar meddelandet ofta känner till dess destination
- Den här typen av meddelanden gör att du kan skicka meddelanden var som helst. Denna mekanism är en central
av Pub/sub och det betyder att de är frikopplade.
För att kunna uttrycka sina ömsesidiga intressen måste de ha en gemensam förståelse. Det är därför,
båda rollerna har en implicit pinnmekanism där producenten av ett meddelande och mottagaren av
konsument av meddelandet möts. Denna mekanism kallas ämne, prenumeration eller topic. Den är
ansvarar för att kategorisera meddelanden till ämnen, är det i huvudsak ett statlöst meddelandefilter.
Ämnen fungerar som sändningsstationer. En utgivare producerar meddelandet till ämnet,
prenumeranterna omedelbart får meddelandet från ämnet. På grund av den frikopplade
är det mest effektiva sättet att utbyta meddelanden att hantera dem asynkront.
Som standard finns det ingen Rails-overhead för mjukvarudesignmönster för att skicka meddelanden mellan komponenter. Utvecklare använder standard objektorienterad programmering (OOP) paradigm: skicka parametrar till funktioner, fråga efter klasser om värden.
När applikationen är ganska okomplicerad kan det räcka. När applikationen växer, t.ex. när vissa operationer måste utföras asynkront, kan projekt behöver en abstraktion som löser detta dataarbetsflöde. Istället för att uppfinna hjulet på nytt kan utvecklare implementera Pub/sub för att fylla denna brist på abstraktion.
Exempel på källkod i Rails skrevs med hjälp av biblioteket
Pub/Sub på Rails (i Rubys nomenklatur kallas ett bibliotek för gem): Du hittar mer information i gemens readme. Implementeringen består av moduler:
Beskriver affärslogiken för att ge Pub/Sub ett sammanhang och därmed göra den ren kod.
modul Meddelanden
extend PubSub::Domän
avsluta
modul Rapporter
extend PubSub::Domän
avsluta
Det är en klass som beskriver vad som hände. Deklarera klassnamnet så självbeskrivande med vad som hände som möjligt, till exempel: cancelled, changed, created, destroyed, sent, updated. Händelsenamn kan se ut som: ProfitAndLossStatementCreatedEvent, vilket innebär att en finansiell rapport skapades.
class Reports::ProfitAndLossStatementCreatedEvent < PubSub::DomainEvent
attribut :profit_and_loss_statement_id, Types::Strict::Integer
slut
Klass som kan avge händelser. Exemplet visar hur man skapar en servicerapport. När rapporten har skapats, emitterar du händelsen för att skapa rapporten.
class Reports::Vinst-och-förlustredovisningService
inkluderar PubSub::Emit
def exekvera
emit(:report_profit_and_loss_statement_created, profit_and_loss_statement_id: id) if result.ok?
end
slut
Denna klass bör exekveras som svar på hanteringen av en händelse.
modul Notifieringar
class ReportsProfitAndLossStatementCreatedHandler < PubSub::DomainEventHandler
def anrop
ReportMailer.vinst_och_förlustutlåtande(vinst_och_förlustutlåtande).deliver_now
slut
privat
def vinst_och_förlust_uttalande
ProfitAndLossStatement.find(event_data.profit_and_loss_statement_id)
slut
slut
slut
Händelser kopplas till sina hanterare genom prenumerationer.
meddelanden:
rapporter__vinst_och_förlust_uträkning_skapad: async
Pub/sub är inte ett vanligt tillvägagångssätt i Ruby in Rails. Som introduceras i artikeln kan detta mönster ge många fördelar för projektet - det kan göra koden ren, frikoppla tjänster och göra dem lätt skalbara.