(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, Autors pie The Codest - Page 7 of 11

Rubīns vietnē Sliedes (Sliedes, RoR) ir labi zināms tīmekļa vietne lietojumprogrammu ietvarstruktūra, kas uzrakstīta lietojumprogrammā Rubīns programmēšanas valoda. Pub/Sub ir īss programmatūras dizaina modeļu nosaukums, ko sauc par Publicēt-abonēt. Es paskaidrošu, kā saziņu starp Rails programmatūras komponentēm var apstrādāt ar Pub/Sub.

Kas ir Pub/sub?

Pub/sub ir programmatūras projektēšanas modelis, kas nodrošina saziņu starp pakalpojumiem. Pakalpojums
ietver vienu no divām lomām: izdevējs (kas ražo) vai saņēmējs (kas patērē). Kas ir
tiek noteikts kā notikums, ziņojums vai paziņojums. In
Šajā rakstā tie tiek lietoti savstarpēji aizvietojami, lai apzīmētu vienu un to pašu.
Pakalpojums, kas ražo, nezina, kas patērē. Pakalpojums, kas patērē, nezina.
uzzināt ziņojuma izcelsmi. Viņi var palikt viens otram nezināmi. Tas atšķiras no
ziņojumu rindas, kur komponents, kas sūta ziņojumu, bieži vien zina tā galamērķi.
- šis ziņapmaiņas stils ļauj sūtīt ziņojumus jebkurā vietā. Šis mehānisms ir galvenais
no Pub/sub un tas nozīmē, ka tie ir atsaistīti.

Lai paustu abpusējas intereses, viņiem ir jābūt vienotai izpratnei. Tāpēc,
abām lomām ir netiešs "stick" mehānisms, kurā ziņojuma sagatavotājs un
satiekas ziņojuma patērētājs. Šo mehānismu sauc par tematu, abonementu vai tematu. Tas ir
atbildīgs par ziņojumu kategorizēšanu subjektiem, tas būtībā ir bezstāvokļa ziņojumu filtrs.
Tēmas darbojas kā apraides stacijas. Izdevējs sagatavo ziņu tēmai,
abonenti nekavējoties saņem ziņu no tēmas. Atdalītā
pakalpojumiem, visefektīvākais veids, kā apmainīties ar ziņojumiem, ir tos apstrādāt asinhroni.

Sliedes bez Pub/Sub

Pēc noklusējuma nav Rails uzcenojumu programmatūras dizaina paraugiem ziņojumu nodošanai starp komponentēm. Izstrādātāji izmanto standarta objektorientēta programmēšana (OOP) paradigma: parametru nodošana funkcijām, pieprasot klases par vērtībām.

Ja pieteikums ir diezgan vienkāršs, ar to var pietikt. Ja lietojumprogramma aug, piemēram, dažas operācijas ir jāveic asinhroni, tad projekts nepieciešama abstrakcija, kas atrisina šo dati darba plūsma. Tā vietā, lai no jauna izgudrotu riteni, izstrādātāji var īstenot Pub/sub aizpildīt šo abstrakcijas trūkumu.

Pub/Sub plusi ar Rails

Pub/Sub ar Rails trūkumi

Rails Pub/Sub ieviest

Rails avota piemēri tika rakstīts, izmantojot bibliotēku
Pub/Sub on Rails (Ruby nomenklatūrā bibliotēku sauc par gem): Sīkāku informāciju atradīsiet gem readme. Īstenošana sastāv no moduļiem:

  1. Domēns,
  2. Pasākums,
  3. Notikumu apstrādātājs,
  4. Pasākuma izdevējs,
  5. Abonēšana.

Domēns

Apraksta uzņēmējdarbības loģiku, lai nodrošinātu kontekstu Pub/Sub un tādējādi nodrošinātu tīrību. kods.

 modulis Paziņojumi
   paplašināt PubSub::Domain
 beigas
 modulis Ziņojumi
   paplašināt PubSub::Domain
 beigas

Pasākums

Tā ir klase, kas apraksta notikušo. Deklarējiet klases nosaukumu kā pašaprakstošu, pēc iespējas norādot, kas noticis, piemēram: atcelts, mainīts, izveidots, iznīcināts, nosūtīts, atjaunināts. Notikumu nosaukumi var izskatīties šādi: ProfitAndLossStatementCreatedEvent, kas nozīmē, ka tika izveidots finanšu pārskats.

 klase Reports::ProfitAndLossStatementCreatedEvent < PubSub::DomainEvent
   atribūts :profit_and_loss_statement_id, Types::Strict::Integer
 end

Pasākuma izdevējs

Klase, kas spēj emitēt notikumus. Šajā piemērā ir parādīta pakalpojuma ziņojuma izveide. Kad ziņojums ir veiksmīgi izveidots, tiek emitēts notikums par ziņojuma izveidošanu.

klase 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

Notikumu apstrādātājs

Šī klase jāizpilda, reaģējot uz notikuma apstrādi.

modulis Paziņojumi
 klase ReportsProfitAndLossStatementCreatedHandler < PubSub::DomainEventHandler
   def call
     ReportMailer.profit_and_loss_statement(profit_and_loss_statement).deliver_now
   end

   privāts

   def profit_and_loss_statement
     ProfitAndLossStatement.find(event_data.profit_and_loss_statement_id)
   end
 end
end

Abonements

Notikumi ir saistīti ar saviem apstrādātājiem, izmantojot abonementus.

paziņojumi:
 reports__profit_and_loss_statement_created: async

Lietošanas piemēri:

Līdzīgi modeļi

  1. EventBus - komponenti var sūtīt notikumus uz EventBus, nezinot, kas tos saņems vai cik respondentu tos saņems. reaģēt,
  2. Novērotājs - subjekts uztur atkarīgo personu sarakstu, ko sauc par novērotājiem, un informē tos, kad mainās to stāvoklis,
  3. Apvienošana - veicot aptauju, klienti periodiski jautā sistēmai, vai ir jauni notikumi vai dati.

Dārgakmeņi

Kopsavilkums

Pub/sub nav izplatīta pieeja Ruby in Rails. Kā jau rakstā minēts, šis modelis projektam var dot daudz priekšrocību - tas var padarīt kodu tīru, atsaistīt pakalpojumus un padarīt tos viegli mērogojamus.

sadarbības baneris
lvLatvian