Rack vaidmuo "Ruby" ekosistemoje
Sužinokite daugiau apie stovo vaidmenį "Ruby" ekosistemoje iš mūsų eksperto ir patobulinkite savo "Ruby" žaidimo įgūdžius.
"Pub/Sub" projektui gali duoti daug naudos - dėl jos kodas gali būti švarus, paslaugos gali būti atskirtos ir lengvai keičiamos. Sužinokite daugiau apie "Pub/Sub" šiame straipsnyje ir pakelkite savo projekto lygį!
Ruby svetainėje Bėgiai (Bėgiai, RoR) yra gerai žinomas žiniatinklio svetainė taikomoji sistema, parašyta Ruby programavimo kalba. Viešbutis / restoranas yra trumpas programinės įrangos projektavimo šablonų, vadinamų Leidinio prenumerata. Paaiškinsiu, kaip "Rails" programinės įrangos komponentų bendravimas gali būti tvarkomas naudojant "Pub/Sub".
Viešbutis / pavaldžioji įstaiga yra programinės įrangos projektavimo modelis, užtikrinantis ryšį tarp paslaugų. Paslauga
atlieka vieną iš dviejų vaidmenų: leidėjo (kuris gamina) arba gavėjo (kuris vartoja). Kas yra
gaminamas ir vartojamas kaip įvykis, pranešimas arba pranešimas. Į
šiame straipsnyje jie vartojami pakaitomis tam pačiam dalykui įvardyti.
Paslauga, kuri gamina, nežino, kas vartoja. Paslauga, kuri vartoja, nežino.
sužinoti pranešimo kilmę. Jie gali likti nežinomi vienas kitam. Tai skiriasi nuo
pranešimų eilės, kai pranešimą siunčiantis komponentas dažnai žino jo paskirties vietą.
- šis žinučių siuntimo stilius leidžia siųsti žinutes bet kur. Šis mechanizmas yra pagrindinis
iš Viešbutis / pavaldžioji įstaiga ir tai reiškia, kad jie yra atsieti.
Kad galėtų išreikšti abipusius interesus, jie turi turėti bendrą supratimą. Todėl,
abu vaidmenys turi numanomą "lazdelės" mechanizmą, kai pranešimo gamintojas ir
susitikti su pranešimo vartotoju. Šis mechanizmas vadinamas subjektu, prenumerata arba tema. Jis yra
atsakinga už pranešimų priskyrimą kategorijoms pagal subjektus, iš esmės tai yra bebūklinis pranešimų filtras.
Temos veikia kaip transliavimo stotys. Leidėjas sukuria pranešimą temai,
abonentai iš karto gauna pranešimą iš temos. Dėl atsietos
paslaugomis, efektyviausias būdas keistis pranešimais yra juos tvarkyti asinchroniškai.
Pagal numatytuosius nustatymus "Rails" nėra jokių "Rails" pridėtinių išlaidų, susijusių su programinės įrangos projektavimo šablonais, skirtais pranešimams tarp komponentų perduoti. Kūrėjai naudoja standartinius į objektus orientuotas programavimas (OOP) paradigma: parametrų perdavimas funkcijoms, klausiant klasių apie reikšmes.
Kai paraiška yra gana nesudėtinga, to gali pakakti. Kai programa auga, pavyzdžiui, kai kurias operacijas reikia atlikti asinchroniškai, tada projektas reikia abstrakcijos, kuri išsprendžia, kad duomenys darbo eiga. Užuot išradinėję dviratį, kūrėjai gali įgyvendinti Viešbutis / pavaldžioji įstaiga užpildyti šį abstrakcijos trūkumą.
"Rails" šaltinio pavyzdžiai buvo parašyti naudojant biblioteką
"Pub/Sub on Rails (Ruby nomenklatūroje biblioteka vadinama gem): Daugiau informacijos rasite gem'o readme. Įgyvendinimą sudaro moduliai:
Aprašoma verslo logika, kad būtų galima pateikti "Pub/Sub" kontekstą ir taip užtikrinti švarią "Pub/Sub" logiką. kodas.
modulis Pranešimai
išplėsti PubSub::Domain
pabaiga
modulis Ataskaitos
išplėsti PubSub::Domain
pabaiga
Tai klasė, kurioje aprašoma tai, kas įvyko. Deklaruokite klasės pavadinimą kaip savaime apibūdinantį, kas įvyko, pavyzdžiui: atšaukta, pakeista, sukurta, sunaikinta, išsiųsta, atnaujinta. Įvykių pavadinimai gali atrodyti taip: ProfitAndLossStatementCreatedEvent, kuris reiškia, kad buvo sukurta finansinė ataskaita.
klasė Reports::ProfitAndLossStatementCreatedEvent < PubSub::DomainEvent
atributas :profit_and_loss_statement_id, Types::Strict::Integer
end
Klasė, galinti skleisti įvykius. Pavyzdyje parodyta, kaip sukurti paslaugos ataskaitą. Sėkmingai sukūrus ataskaitą, išspinduliuojamas šios ataskaitos sukūrimo įvykis.
klasė 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
Ši klasė turėtų būti vykdoma kaip atsakas į įvykio tvarkymą.
modulis Pranešimai
klasė ReportsProfitAndLossStatementCreatedHandler < PubSub::DomainEventHandler
def call
ReportMailer.profit_and_loss_statement(profit_and_loss_statement).deliver_now
end
privatus
def pelno_ir_nuostolio_ataskaita
ProfitAndLossStatement.find(event_data.profit_and_loss_statement_id)
end
end
end
Įvykiai su savo tvarkytojais susiejami per prenumeratas.
pranešimai:
reports__profit_and_loss_statement_created: async
"Pub/sub" nėra įprastas "Ruby in Rails" metodas. Kaip pristatoma straipsnyje, šis modelis gali duoti daug naudos projektui - dėl jo kodas gali būti švarus, paslaugos gali būti atskirtos ir lengvai keičiamos.
