Rack loma Ruby ekosistēmā
Uzziniet vairāk par plauktu lomu Ruby ekosistēmā no mūsu eksperta un uzlabojiet savas rubīna spēles prasmes.
Pub/Sub var sniegt projektam daudz priekšrocību - tas var padarīt kodu tīru, atsaistīt pakalpojumus un padarīt tos viegli mērogojamus. Uzziniet vairāk par Pub/Sub šajā rakstā un paaugstiniet sava projekta līmeni!
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.
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.
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.
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:
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
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
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
Šī 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
Notikumi ir saistīti ar saviem apstrādātājiem, izmantojot abonementus.
paziņojumi:
reports__profit_and_loss_statement_created: async
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.
