5 příkladů nejlepšího použití jazyka Ruby
Přemýšleli jste někdy o tom, co všechno můžeme dělat s Ruby? No, obloze se asi meze nekladou, ale rádi si povíme o některých více či méně známých případech...
Pub/Sub může projektu přinést mnoho výhod - může zajistit čistotu kódu, oddělit služby a umožnit jejich snadné škálování. V následujícím článku se dozvíte více o Pub/Sub a zvýšíte úroveň svého projektu!
Ruby na adrese Rails (Kolejnice, RoR) je známý framework webových aplikací napsaný v jazyce Ruby programovací jazyk. Hospoda/podnik je zkrácený název návrhových vzorů softwaru, které se nazývají Publish-subscribe. Vysvětlím, jak by se komunikace mezi softwarovými komponentami v systému Rails dala řešit pomocí Pub/Sub.
Pub/sub je návrhový vzor softwaru zajišťující komunikaci mezi službami. Služba
zahrnuje jednu ze dvou rolí: vydavatele (který produkuje) nebo příjemce (který spotřebovává). Co je
je určen jako událost, zpráva nebo oznámení. V
V kontextu tohoto článku se tyto pojmy používají zaměnitelně a označují totéž.
Služba, která vyrábí, neví, kdo spotřebovává. Služba, která spotřebovává, neví.
znát původ zprávy. Mohou zůstat navzájem neznámé. Tím se liší od
fronty zpráv, kde komponenta, která zprávu odesílá, často zná její cíl.
- tento styl zasílání zpráv umožňuje posílat zprávy odkudkoli. Tento mechanismus je základem
z Pub/sub a to znamená, že jsou oddělené.
Aby mohli vyjádřit své společné zájmy, musí mít společné porozumění. Proto,
Obě role mají implicitní mechanismus hole, kde producent zprávy a
spotřebitele zprávy splnit. Tento mechanismus se nazývá subjekt, odběr nebo téma. Je to
zodpovědný za kategorizaci zpráv subjektům, je to v podstatě bezstavový filtr zpráv.
Témata fungují jako vysílací stanice. Vydavatel vytváří zprávu pro téma,
odběratelé okamžitě obdrží zprávu z tématu. Vzhledem k oddělené
služeb je nejefektivnějším způsobem výměny zpráv jejich asynchronní zpracování.
Ve výchozím nastavení není v systému Rails žádná režie pro návrhové vzory softwaru pro předávání zpráv mezi komponentami. Vývojáři používají standardní objektově orientované programování (OOP) paradigma: předávání parametrů funkcím, dotazování se na třídy o hodnotách.
Pokud je žádost poměrně nekomplikovaná, může to stačit. Když se aplikace rozroste, například je třeba některé operace provádět asynchronně, pak je třeba použít tzv. projekt potřebuje abstrakci, která řeší tento tok dat. Místo toho, aby vývojáři znovu vynalézali kolo, mohou implementovat Pub/sub aby tento nedostatek abstrakce vyplnil.
Příklady zdrojových kódů v Rails byly napsány pomocí knihovny
Pub/Sub on Rails (v nomenklatuře Ruby se knihovna nazývá gem): Další podrobnosti najdete v readme gemu. Implementace se skládá z modulů:
Popisuje obchodní logiku, aby poskytla kontext pro Pub/Sub, a tím umožnila čistou práci s daty. kód.
modul Oznámení
extend PubSub::Domain
end
modul Zprávy
rozšířit PubSub::Domain
end
Jedná se o třídu, která popisuje, co se stalo. Název třídy deklarujte jako sebepopisný s tím, co se stalo, například: zrušeno, změněno, vytvořeno, zničeno, odesláno, aktualizováno. Názvy událostí mohou vypadat např: ProfitAndLossStatementCreatedEvent, což znamená, že byl vytvořen finanční výkaz.
třída Reports::ProfitAndLossStatementCreatedEvent < PubSub::DomainEvent
atribut :profit_and_loss_statement_id, Types::Strict::Integer
end
Třída schopná vysílat události. Příklad ukazuje vytvoření servisní zprávy. Po úspěšném vytvoření sestavy emituje událost vytvoření této sestavy.
třída 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
Tato třída by měla být spuštěna v reakci na zpracování události.
modul Oznámení
třída 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
Události jsou spojeny se svými zpracovateli prostřednictvím odběrů.
oznámení:
reports__profit_and_loss_statement_created: async
Pub/sub není v Ruby in Rails běžný přístup. Jak bylo představeno v článku, tento vzor může projektu přinést mnoho výhod - díky němu je kód čistý, služby jsou oddělené a snadno škálovatelné.
