Rubyの5つの活用例
Rubyで何ができるのだろうと思ったことはないだろうか。まあ、可能性は無限大でしょうが、多少なりとも知られている事例についてお話しできれば幸いです。
Pub/Subはプロジェクトに多くのメリットをもたらします - コードをクリーンにし、サービスをデカップリングし、簡単にスケーラブルにすることができます。以下の記事でPub/Subについて詳しく学び、プロジェクトをレベルアップさせましょう!
Ruby on Rails (Rails、RoR)で書かれた有名なWebアプリケーションフレームワークです。 ルビー プログラミング言語。 パブ/サブ と呼ばれるソフトウェアデザインパターンの略称である。 パブリッシュ・サブスクライブ.Railsのソフトウェア・コンポーネント間の通信をPub/Subでどのように処理できるかを説明する。
パブ/サブ は、サービス間通信を提供するソフトウェアのデザインパターンである。サービス
は、発行者(生産する人)と受信者(消費する人)の2つの役割のいずれかを伴う。何が
消費されるべき生成物は、イベント、メッセージ、通知として決定される。その中で
本記事では、両者は同じものを指す言葉として同じ意味で使われている。
生産するサービスは消費する人を知らない。消費するサービスは
メッセージの発信元を知ることができる。お互いに知らないままでいられる。これは
メッセージキューでは、メッセージを送信するコンポーネントがその宛先を知っていることが多い。
- このスタイルのメッセージングでは、どこにいてもメッセージを送ることができる。このメカニズムは
の パブ/サブ そしてそれは、両者が切り離されていることを意味する。
相互の利益を表現するためには、共通の理解が必要である。したがって
この2つの役割には、メッセージのプロデューサーと、メッセージのプロデューサーの間のスティックという暗黙のメカニズムがある。
メッセージの消費者が出会う。このメカニズムは、サブジェクト、サブスクリプション、またはトピックと呼ばれる。これは
メッセージのサブジェクトへの分類を担当し、本質的にはステートレス・メッセージ・フィルタである。
トピックは放送局の役割を果たす。パブリッシャーはトピックへのメッセージを作成する、
サブスクライバはトピックからのメッセージを即座に受け取る。なぜなら
サービスでは、メッセージを交換する最も効率的な方法は、それらを非同期で処理することである。
デフォルトでは、コンポーネント間でメッセージを受け渡すソフトウェアデザインパターンにRailsのオーバーヘッドはありません。開発者は標準の オブジェクト指向プログラミング (OOP)パラダイム:関数にパラメータを渡し、値に関するクラスを求める。
アプリケーションがそれほど複雑でない場合は、これで十分かもしれない。アプリケーションの規模が大きくなると、例えば、いくつかの操作を非同期で行う必要が出てくる。 プロジェクト は、そのデータ・ワークフローを解決する抽象化を必要としている。車輪を再発明する代わりに、開発者は パブ/サブ この抽象性の欠如を埋めるために。
Railsのソースの例は、ライブラリ
パブ/サブ・オン・レイルズ (Rubyの命名法では、ライブラリのことをgemと呼びます):詳細はgemのreadmeを参照してください。実装はモジュールで構成されています:
Pub/Subのコンテキストを提供するために、ビジネスロジックを記述する。 コード.
モジュール Notifications
extend PubSub::Domain
終了
モジュール Reports
extend PubSub::Domain
終了
これは、何が起こったかを記述するクラスである。例えば、キャンセルされた、変更された、作成された、破壊された、送信された、更新された。イベント名は次のようになります:これは財務諸表が作成されたことを意味します。
クラス Reports::ProfitAndLossStatementCreatedEvent < PubSub::DomainEvent
属性 :profit_and_loss_statement_id, Types::Strict::Integer
終了
イベントを発することができるクラス。この例では、サービス・レポートを作成しています。レポートが正常に作成されたら、そのレポートを作成したイベントを発行します。
クラス 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
このクラスは、イベントの処理に応答して実行されなければならない。
モジュール Notifications
class ReportsProfitAndLossStatementCreatedHandler < PubSub::DomainEventHandler
def call
ReportMailer.profit_and_loss_statement(profit_and_loss_statement).deliver_now
終了
プライベート
def profit_and_loss_statement
ProfitAndLossStatement.find(event_data.profit_and_loss_statement_id)
終了
終了
終了
イベントは、サブスクリプションを通じてハンドラに結び付けられる。
を通知します:
reports__profit_and_loss_statement_created: async
Pub/subはRuby in Railsでは一般的なアプローチではありません。記事で紹介したように、このパターンはプロジェクトに多くの利点をもたらします - コードをクリーンにし、サービスを切り離し、簡単にスケーラブルにすることができます。