5 esimerkkiä Rubyn parhaasta käytöstä
Oletko koskaan miettinyt, mitä voimme tehdä Rubylla? No, taivas on luultavasti rajana, mutta puhumme mielellämme muutamista enemmän tai vähemmän tunnetuista tapauksista....
Pub/Sub voi tuoda monia etuja projektille - se voi tehdä koodista siistiä, irrottaa palvelut toisistaan ja tehdä niistä helposti skaalautuvia. Lue lisää Pub/Subista seuraavasta artikkelista ja nosta projektisi tasoa!
Ruby on Rails (Rails, RoR) on tunnettu web-sovelluskehys, joka on kirjoitettu kielellä Ruby ohjelmointikieli. Pub/Sub on lyhennetty nimi ohjelmistojen suunnittelumalleille nimeltä Publish-subscribe. Selitän, miten ohjelmistokomponenttien välinen kommunikointi Railsissa voitaisiin hoitaa Pub/Sub-menetelmällä.
Pub/sub on ohjelmistosuunnittelumalli, joka tarjoaa palveluiden välistä viestintää. Palvelu
liittyy jompaankumpaan kahdesta roolista: julkaisija (joka tuottaa) tai vastaanottaja (joka kuluttaa). Mikä on
tuotetaan kulutettavaksi, määritetään tapahtumaksi, viestiksi tai ilmoitukseksi. Vuonna
Tässä artikkelissa niitä käytetään vaihtelevasti viittaamaan samaan asiaan.
Palvelu, joka tuottaa, ei tiedä, kuka kuluttaa. Palvelu, joka kuluttaa, ei
tietää viestin alkuperän. Ne voivat pysyä toisilleen tuntemattomina. Se eroaa
viestijonot, joissa viestin lähettävä komponentti usein tietää viestin määränpään.
- tämäntyyppisen viestinnän avulla voit lähettää viestejä missä tahansa. Tämä mekanismi on keskeinen
of Pub/sub ja se tarkoittaa, että ne on erotettu toisistaan.
Yhteisten etujensa ilmaiseminen edellyttää yhteistä ymmärrystä. Siksi,
molemmissa rooleissa on implisiittinen mekanismi, jossa viestin tuottaja ja
viestin kuluttaja tapaa. Tätä mekanismia kutsutaan aiheeksi, tilaukseksi tai aiheeksi. Se on
vastaa viestien luokittelusta kohteisiin, se on lähinnä tilaton viestisuodatin.
Aiheet toimivat lähetysasemina. Julkaisija tuottaa viestin aiheeseen,
tilaajat saavat välittömästi viestin aiheesta. Kytkettyjen
palveluissa tehokkain tapa vaihtaa viestejä on käsitellä niitä asynkronisesti.
Oletusarvoisesti Railsissa ei ole ohjelmistosuunnittelumallien yleiskustannuksia komponenttien välisessä viestien välittämisessä. Kehittäjät käyttävät standardia oliosuuntautunut ohjelmointi (OOP) paradigma: parametrien välittäminen funktioille, luokkien kysyminen arvoista.
Kun hakemus on melko yksinkertainen, se voi riittää. Kun sovellus kasvaa ja esimerkiksi joitakin toimintoja on suoritettava asynkronisesti, niin silloin projekti tarvitsee abstraktiota, joka ratkaisee tämän tiedonkulun. Sen sijaan, että kehittäjät keksisivät pyörän uudelleen, he voivat toteuttaa Pub/sub täyttämään tämän abstraktion puutteen.
Esimerkkejä lähdekoodin Rails kirjoitettiin käyttäen kirjastoa
Pub/Sub on Rails (Rubyn nimikkeistössä kirjasto on nimeltään gem): Löydät lisätietoja gemin readme-tiedostosta. Toteutus koostuu moduuleista:
Kuvaa liiketoimintalogiikan, jotta Pub/Subille voidaan tarjota konteksti ja näin ollen tehdä puhtaat koodi.
moduuli Ilmoitukset
extend PubSub::Domain
end
moduuli Raportit
extend PubSub::Domain
end
Se on luokka, joka kuvaa, mitä tapahtui. Ilmoita luokan nimi mahdollisimman hyvin itseään kuvaavaksi sen kanssa, mitä tapahtui, esimerkiksi: peruutettu, muutettu, luotu, tuhottu, lähetetty, päivitetty. Tapahtuman nimet voivat näyttää seuraavanlaisilta: ProfitAndLossStatementCreatedEvent, joka tarkoittaa, että tilinpäätös luotiin.
class Reports::ProfitAndLossStatementCreatedEvent < PubSub::DomainEvent
attribuutti :profit_and_loss_statement_id, Types::Strict::Integer
end
Luokka, joka pystyy lähettämään tapahtumia. Esimerkissä luodaan palveluraportti. Kun raportti on luotu onnistuneesti, lähetetään raportin luomista koskeva tapahtuma.
luokka Raportit::TuloslaskelmaPalvelu
include PubSub::Emit
def execute
emit(:report_profit_and_loss_statement_created, profit_and_loss_statement_id: id) if result.ok?
end
end
Tämä luokka on suoritettava vastauksena tapahtuman käsittelyyn.
moduuli Ilmoitukset
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
Tapahtumat sidotaan käsittelijöihinsä tilausten kautta.
ilmoitukset:
raportteja__profit_and_loss_statement_created: async
Pub/sub ei ole yleinen lähestymistapa Ruby in Railsissa. Kuten artikkelissa esitellään, tämä malli voi tuoda monia etuja projektille - se voi tehdä koodista siistiä, irrottaa palvelut toisistaan ja tehdä niistä helposti skaalautuvia.