(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-5LHNRP9'); thecodest, höfundur hjá The Codest - síða 7 af 11

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

Ókostir Pub/Sub með Rails

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:

  1. Lén,
  2. Viðburður,
  3. Viðburðahandfari,
  4. Viðburðargáfandi,
  5. á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:

Svipuð mynstur

  1. 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,
  2. Áhorfandi – viðfangsefnið heldur lista yfir háð aðila, sem kallast áhorfendur, og tilkynnir þeim um breytingar á ástandi sínu,
  3. 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.

samstarfsfáninn
is_ISIcelandic