5 näidet Ruby parimast kasutamisest
Kas olete kunagi mõelnud, mida me saame teha Ruby'ga? Noh, taevas on ilmselt piirideta, kuid me räägime hea meelega mõnest rohkem või vähem teadaolevast juhtumist...

Pub/Sub võib tuua projektile palju kasu - see võib muuta koodi puhtaks, lahutada teenuseid ja muuta need kergesti skaleeritavaks. Loe Pub/Subi kohta lähemalt järgmisest artiklist ja tõsta oma projekti tasemele!
Ruby on Rails (Rails, RoR) on tuntud veebirakenduste raamistik, mis on kirjutatud keeles Ruby programmeerimiskeel. Pub/Sub on tarkvara disainimustrite lühinimetus, mida nimetatakse Publish-subscribe. Ma selgitan, kuidas Railsi tarkvarakomponentide vahelist suhtlust saaks käsitleda Pub/Subi abil.
Pub/sub on tarkvara disainimudel, mis pakub teenuste vahelist suhtlust. Teenus
kaasneb üks kahest rollist: avaldaja (kes toodab) või vastuvõtja (kes tarbib). Mis on
toodetakse tarbitavaks sündmuseks või sõnumiks või teatiseks. In the
käesoleva artikli kontekstis kasutatakse neid mõisteid vaheldumisi ühe ja sama asja tähistamiseks.
Teenus, mis toodab, ei tea, kes tarbib. Teenus, mis tarbib, ei tea
teate sõnumi päritolu. Nad võivad jääda üksteisele tundmatuks. See erineb
sõnumijärjekorrad, kus sõnumi saatev komponent teab sageli selle sihtkohta.
- selline sõnumite saatmise stiil võimaldab saata sõnumeid kõikjale. See mehhanism on põhiline
aadressilt Pub/sub ja see tähendab, et nad on lahutatud.
Oma ühiste huvide väljendamiseks peavad nad jagama ühist arusaama. Seetõttu,
mõlemas rollis on vaikimisi mehhanismi pulk, kus sõnumi tootja ja
sõnumi tarbija vastab. Seda mehhanismi nimetatakse subjektiks, tellimuseks või teemaks. See on
vastutab sõnumite liigitamise eest subjektidele, see on sisuliselt olematu sõnumifilter.
Teemad toimivad saatejaamana. Väljaandja toodab sõnumi teemale,
tellijad saavad koheselt teate teemast. Kuna lahtiseotud
teenuste puhul on kõige tõhusam viis sõnumite vahetamiseks nende asünkroonne käitlemine.
Vaikimisi ei ole Railsi tarkvaradisainimustrite puhul sõnumite edastamiseks komponentide vahel mingeid üleliigseid kulusid. Arendajad kasutavad standardseid objektorienteeritud programmeerimine (OOP) paradigma: parameetrite edastamine funktsioonidele, klasside küsimine väärtuste kohta.
Kui taotlus on üsna lihtne, võib sellest piisata. Kui rakendus kasvab, näiteks on vaja teha mõningaid operatsioone asünkroonselt, siis on projekt vajab abstraktsiooni, mis lahendab selle andmetöötluse. Selle asemel, et leiutada ratast uuesti, saavad arendajad rakendada Pub/sub et täita see abstraktsiooni puudus.
Näiteid allikas Rails kirjutati kasutades raamatukogu
Pub/Sub on Rails (Ruby nomenklatuuris nimetatakse raamatukogu gemiks): Rohkem üksikasju leiate gemi readme'ist. Rakendus koosneb moodulitest:
Kirjeldab äriloogikat, et anda kontekst Pub/Subile ja seega teha puhas kood.
moodul Teated
laiendada PubSub::Domain
end
moodul Aruanded
laiendada PubSub::Domain
end
See on klass, mis kirjeldab juhtunut. Deklareerige klassi nimi võimalikult isekirjeldavaks koos sellega, mis juhtus, näiteks: tühistatud, muudetud, loodud, hävitatud, saadetud, uuendatud. Sündmuse nimed võivad välja näha järgmiselt: ProfitAndLossStatementCreatedEvent, mis tähendab, et finantsaruanne loodi.
class Reports::ProfitAndLossStatementCreatedEvent < PubSub::DomainEvent
atribuut :profit_and_loss_statement_id, Types::Strict::Integer
end
Klass, mis on võimeline sündmusi välja saatma. Näide näitab teenuse aruande loomist. Kui aruanne on edukalt loodud, saadetakse välja selle aruande loomise sündmus.
klass 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
See klass tuleks käivitada vastusena sündmuse käsitlemisele.
moodul Teated
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
Sündmused on seotud nende käitlejatega tellimise kaudu.
teatised:
Aruanded__kasum_ja_kaotuse_aruanne_loodud: async
Pub/sub ei ole Ruby in Railsis levinud lähenemisviis. Nagu artiklis tutvustatud, võib see muster tuua projektile palju kasu - see võib muuta koodi puhtaks, lahutada teenuseid ja muuta need kergesti skaleeritavaks.