5 przykładów najlepszego wykorzystania Rubiego
Czy kiedykolwiek zastanawiałeś się, co możemy zrobić z Ruby? Cóż, niebo jest prawdopodobnie granicą, ale chętnie porozmawiamy o kilku mniej lub bardziej znanych przypadkach...
Pub/Sub może przynieść wiele korzyści dla projektu - może sprawić, że kod będzie czysty, oddzielić usługi i uczynić je łatwo skalowalnymi. Dowiedz się więcej o Pub/Sub w poniższym artykule i podnieś poziom swojego projektu!
Ruby on Rails (Rails, RoR) jest dobrze znanym frameworkiem aplikacji internetowych napisanym w języku Ruby język programowania. Pub/Sub to krótka nazwa wzorców projektowych oprogramowania zwanych Publikuj-subskrybuj. Wyjaśnię, w jaki sposób komunikacja między komponentami oprogramowania w Railsach może być obsługiwana przez Pub/Sub.
Pub/sub to wzorzec projektowy oprogramowania zapewniający komunikację między usługami. Usługa
wiąże się z jedną z dwóch ról: wydawcy (który produkuje) lub odbiorcy (który konsumuje). Co to jest
jest określana jako zdarzenie, komunikat lub powiadomienie. W
W kontekście tego artykułu są one używane zamiennie w odniesieniu do tej samej rzeczy.
Usługa, która produkuje, nie wie, kto konsumuje. Usługa, która konsumuje, nie
znają pochodzenie wiadomości. Mogą pozostać dla siebie nieznani. Różni się to od
kolejki wiadomości, w których komponent wysyłający wiadomość często zna jej miejsce docelowe
- Ten styl przesyłania wiadomości pozwala na wysyłanie ich w dowolne miejsce. Mechanizm ten jest podstawą
z Pub/sub i oznacza to, że są one od siebie oddzielone.
Aby wyrazić swoje wzajemne interesy, muszą mieć wspólne zrozumienie. Dlatego,
Obie role mają ukryty mechanizm "kija", w którym producent wiadomości i użytkownik
konsument wiadomości spotyka się. Mechanizm ten nazywany jest tematem, subskrypcją lub tematem. Jest to
odpowiedzialny za kategoryzowanie wiadomości do tematów, jest zasadniczo bezstanowym filtrem wiadomości.
Tematy działają jak stacje nadawcze. Wydawca wysyła wiadomość do tematu,
subskrybenci natychmiast otrzymują wiadomość z tematu. Ze względu na rozłączność
usług, najbardziej efektywnym sposobem wymiany wiadomości jest ich asynchroniczna obsługa.
Domyślnie Railsy nie mają narzutu na wzorce projektowe oprogramowania do przekazywania komunikatów między komponentami. Programiści używają standardowych programowanie obiektowe (OOP): przekazywanie parametrów do funkcji, odpytywanie klas o wartości.
Gdy aplikacja jest raczej nieskomplikowana, może to wystarczyć. Gdy aplikacja się rozrasta, na przykład niektóre operacje muszą być wykonywane asynchronicznie, wówczas należy użyć funkcji projekt wymaga abstrakcji, która rozwiązuje ten przepływ danych. Zamiast wymyślać koło na nowo, deweloperzy mogą zaimplementować Pub/sub aby wypełnić ten brak abstrakcji.
Przykłady źródeł w Railsach zostały napisane przy użyciu biblioteki
Pub/Sub on Rails (w nomenklaturze Rubiego biblioteka nazywana jest gemem): Więcej szczegółów znajdziesz w readme gema. Implementacja składa się z modułów:
Opisuje logikę biznesową w celu zapewnienia kontekstu dla Pub/Sub, a tym samym uczynienia go czystym. kod.
moduł Powiadomienia
extend PubSub::Domain
koniec
moduł Raporty
extend PubSub::Domain
koniec
Jest to klasa, która opisuje, co się stało. Zadeklaruj nazwę klasy jako samoopisującą się z tym, co się stało, na przykład: anulowane, zmienione, utworzone, zniszczone, wysłane, zaktualizowane. Nazwy zdarzeń mogą wyglądać następująco: ProfitAndLossStatementCreatedEvent, co oznacza, że zostało utworzone sprawozdanie finansowe.
class Reports::ProfitAndLossStatementCreatedEvent < PubSub::DomainEvent
atrybut :profit_and_loss_statement_id, Types::Strict::Integer
end
Klasa zdolna do emitowania zdarzeń. Przykład pokazuje tworzenie raportu usługi. Po pomyślnym utworzeniu raportu emitowane jest zdarzenie utworzenia tego raportu.
class 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
Klasa ta powinna być wykonywana w odpowiedzi na obsługę zdarzenia.
moduł Powiadomienia
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
Zdarzenia są powiązane ze swoimi programami obsługi poprzez subskrypcje.
powiadomienia:
reports__profit_and_loss_statement_created: async
Pub/sub nie jest powszechnym podejściem w Ruby in Rails. Jak przedstawiono w artykule, wzorzec ten może przynieść wiele korzyści dla projektu - może uczynić kod czystym, oddzielić usługi i uczynić je łatwo skalowalnymi.