Rúbín á Relsar (Relsar, Réttur til afturkomu) er vel þekktur vefur forritarammi skrifaður í Rúbín forritunarmál. Birta/áskrifa er stutt nafn á hugbúnaðarhönnunarmynstrum sem kallast Birta–áskrifa. Ég mun útskýra hvernig samskipti milli hugbúnaðareininga í Rails gætu verið leyst með Pub/Sub.
Hvað er Pub/sub?
Birta/áskrifa er hugbúnaðarhönnunarmynstur sem gerir þjónustu kleift að eiga samskipti sín á milli. Þjónusta
felur í sér annað af tveimur hlutverkum: útgefanda (sem framleiðir) eða viðtakanda (sem neytir). Hvað er
framleitt til neyslu er ákvarðað sem atburður eða skilaboð eða tilkynning. Í
Í samhengi þessarar greinar eru þau notuð skiptum saman til að vísa til sama hlutar.
Þjónustan sem framleiðir veit ekki hver neytir. Þjónustan sem neytir veit ekki
Þekkja uppruna skilaboðanna. Þeir geta verið óþekktir hver öðrum. Það er öðruvísi en
Skilaboðaraðir, þar sem íhlutinn sem sendir skilaboðin þekkir oft áfangastaðinn sinn.
– þessi stíll skilaboðamiðlunar gerir þér kleift að senda skilaboð hvar sem er. Þessi aðferð er kjarni
af Birta/áskrifa og það þýðir að þau eru aftengd.
Til að tjá gagnkvæm hagsmuni sín verða þeir að deila sameiginlegri skilningi. Þess vegna,
báðar hlutverk hafa óbeina refishvörf þar sem framleiðandi skilaboða og
neytandi skilaboða sem mætir. Þessi vélbúnaður kallast viðfangsefni, áskrift eða efni. Það er
Ábyrgur fyrir að flokka skilaboð eftir efni, er það í eðli sínu stateless skilaboðasíu.
Þemu virka sem útsendingastöðvar. Útgefandi framleiðir skilaboðin til þemasins,
áskrifendur fá strax skilaboðin frá viðfangsefninu. Vegna afkúplunar
Þjónustur, skilvirkasta leiðin til að skiptast á skilaboðum er að vinna úr þeim á ósamstilltan hátt.
Rails án Pub/Sub
Á sjálfgefinni stillingu er engin Rails-viðbót fyrir hugbúnaðarhönnunarmynstur til að senda skilaboð á milli íhluta. Forritarar nota staðlaða hlutbundin forritun (OOP) fyrirmynd: að senda breytur til fallanna, að biðja um flokka um gildi.
Þegar forritið er frekar einfalt gæti það dugað. Þegar forritið stækkar, til dæmis, þarf að framkvæma sumar aðgerðir ósamstillt, þá … verkefni þarf abstraktjón sem leysir það gögn vinnslaferli. Í stað þess að enduruppgötva hjólið geta forritarar innleitt Birta/áskrifa til að fylla þennan skort á abstraktun.
Kostir Pub/Sub með Rails
- Forðastu Active Record callbacks.
- Með því að bæta við ósamhverfri samhliða úrvinnslu í kerfi batna frammistaða, áreiðanleiki og Stigstærð eru bætt.
- Skilaboð má senda út ósamhliða til mismunandi hluta kerfisins.
- Leyfir að senda skilaboð ósamhliða til mismunandi hluta kerfisins.
- Aðskilnaður – að bæta við eða breyta virkni mun ekki hafa áhrif á neitt vegna Pub/Sub
Leyfir þér að breyta hvernig allt hefur samskipti. - Skilaboðaneytandinn þarf ekki lengur að athuga reglulega hvort uppfærslur eða nýjar séu til.
upplýsingar. Það dregur úr afhendingartöfum sem geta verið sérstaklega vandamál í kerfum
án þolinmæði fyrir töfum. - Það er engin takmörkun á því hversu marga áskrifendur kerfið getur sinnt, því það getur breyst,
uppfæra, margfalast eða hverfa hvenær sem er.
Ókostir Pub/Sub með Rails
- Helsti ókostur við birtingar-/áskriftarkerfi er aðskilnaður birgis og
áskrifandi.
Kynning á Rails Pub/Sub
Dæmi um uppsprettu í Rails var skrifað með bókasafni.
Birgja/áskrifendakerfi í Rails (í Ruby-heitihefð er bókasafn kallað gem): Þú finnur nánari upplýsingar í readme-skrá gemsins. Framkvæmdin samanstendur af einingum:
- Lén,
- Viðburður,
- Viðburðahandfari,
- Viðburðargáfandi,
- áskrift.
Lén
Lýsir viðskiptalógík til að veita samhengi fyrir Pub/Sub og þannig gera það hreint kóði.
tilkynningar
framlengir PubSub::Domain
end
module Reports
extend PubSub::Domain
end
Viðburður
Þetta er flokkur sem lýsir því sem gerðist. Lýstu nafni flokksins sem sjálfskýrandi með því sem gerðist, til dæmis: felldur niður, breyttur, búinn til, eytt, sendur, uppfærður. Atburðanafni geta litið svona út: ProfitAndLossStatementCreatedEvent, sem þýðir að fjárhagsyfirlit hafi verið búið til.
class Reports::ProfitAndLossStatementCreatedEvent < PubSub::DomainEvent
attribute :profit_and_loss_statement_id, Types::Strict::Integer
end
Viðburðargagnaveitandi
Flokkur sem getur sent atburði. Dæmið sýnir hvernig búa má til þjónustuskýrslu. Þegar skýrslan er búin til með góðum árangri er sent atburður um það.
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
Viðburðahandfari
Þetta forrit ætti að keyra sem svar við meðhöndlun atburðar.
module Notifications
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
áskrift
Atburðir eru tengdir viðhöndlara sína með áskriftum.
tilkynningar:
skýrslur__hagnaðarskýrsla_búin_til: async
Dæmi um notkunartilvik:
- “Fylgja”-eiginleiki í samfélagsnetum,
- Internet hlutanna,
- Póstsending,
- Tilkynning um búna skrár.
Svipuð mynstur
- Viðburðarbyssa – Þættir geta sent atburði til EventBus án þess að vita hver muni taka þá upp eða hversu margir viðbragðsaðilar muni react,
- Áhorfandi – viðfangsefnið heldur lista yfir háð aðila, sem kallast áhorfendur, og tilkynnir þeim um breytingar á ástandi sínu,
- Samlagning – við fyrirspurnir spyrja viðskiptavinir kerfið reglulega hvort einhverjar nýjar atburðir eða gögn séu til.
Gersemar
Yfirlit
Pub/sub er ekki algeng nálgun í Ruby on Rails. Eins og fram kemur í greininni getur þetta mynstur fært verkefninu margvíslega kosti – það getur gert kóðann hreinan, losað þjónusturnar og gert þær auðveldlega stækkanlegar.
