Upgrade to Pro — share decks privately, control downloads, hide ads and more …

アプリケーションの設計にEIPの知識が役に立つよ!

増田 亨
February 09, 2022

 アプリケーションの設計にEIPの知識が役に立つよ!

非同期メッセージングを使ったインテグレーションパターン (EIP)は、クラス設計にも参考になるものが多い。
すぐに非同期メッセージングを使わないとしても、EIPは設計の参考情報として知っておきたい。

増田 亨

February 09, 2022
Tweet

More Decks by 増田 亨

Other Decks in Programming

Transcript

  1. アプリケーションの設計に
    EIPの知識が役に立つよ!
    2022年2月9日
    有限会社 システム設計 増田 亨
    現場から学ぶモデル駆動設計 第10回
    2022/2/9 1

    View full-size slide

  2. アプリケーション間の連携
    • いま時は、Webアプリケーションは孤立していることはほとん
    どなく、他のサービスと連携している
    • 連携方法は“Web API”(HTTP リクエスト/レスポンス)の同
    期方式が主流
    • 非同期メッセージング “pub/sub”も連携方式の選択肢として
    だいぶ使いやすくなってきたが、普及はこれから
    2022/2/9 2

    View full-size slide

  3. アプリケーション設計とメッセージ処理
    • Webアプリケーションは、HTTPリクエストやHTTPレスポン
    スをメッセージと考えると、メッセージ処理の一形態
    • データベース操作も、レコードをメッセージと考えるとメッ
    セージ処理の一形態
    • 非同期メッセージングのミドルウェアやサービスを使わなくて
    も、EIPはアプリケーションの設計パターンとして参考になる
    2022/2/9 3

    View full-size slide

  4. Web アプリケーション設計とEIP
    • EIP のパターンはクラス設計の参考になる
    • 特にアプリケーション層・プレゼンテーション層・データソー
    ス層では、EIPのメッセージ処理の考え方がいろいろ使える
    • 私がクラス設計によく使うEIPのパターンを8つ紹介します
    2022/2/9 4

    View full-size slide

  5. 処理の構造化(クラスの役割分担)のパターン
    2022/2/9 5

    View full-size slide

  6. 関心事の分離:並列化
    プロセスマネージャー
    リクエスト
    たばね役に
    専念するクラス
    機能特化の
    クラス群
    ひとつのクラスでなんでもかんでも
    抱え込まないようする
    機能の追加・修正が楽で安全
    2022/2/9 6

    View full-size slide

  7. 関心事の分離:直列化
    リクエスト 通知/記録
    パイプとフィルター
    前処理クラス 中間処理クラス 後処理クラス
    ・段階ごとに別のクラスが処理をする
    ・呼び出しは void型のメソッド (リターン値はない、副作用があることの明示)
    ・中断は例外を発生させる
    ・例:データベースへの書き込み、メール送信による通知
    機能の追加・修正が楽で安全
    2022/2/9 7

    View full-size slide

  8. 関心の分離:分岐
    リクエスト
    分岐判定に
    専念するクラス
    適切なクラス/外部サービス
    に処理を任せる
    コンテントベースの経路分岐
    機能の追加・修正が楽で安全
    ・分岐役と処理役の分離
    リクエストの内容により
    分岐先を切り替える
    (ディスパッチャー)
    2022/2/9 8

    View full-size slide

  9. ソース⇒分割⇒振分け⇒個別処理⇒集約
    インバウンド アウトバウンド
    複合メッセージの処理
    ひとつのメッセージに複数の情報が混在している時
    最初に分割して処理を振り分け、結果を集約する
    最初に分割して中間を単純化
    2022/2/9 9

    View full-size slide

  10. メッセージ内容(情報)の扱い方のパターン
    2022/2/9 10

    View full-size slide

  11. エンリッチ:必要な情報を付加する
    ユーザーIDを受け取り、ユーザ情報を付加して後続処理に渡す
    予約番号を受け取り、予約内容を付加して後続処理に渡す
    前準備を分離して後続処理を単純化する
    2022/2/9 11

    View full-size slide

  12. フィルター:不要な情報を取り除く
    ひとつのメッセージが多様な情報を含んでいる時
    後続処理に必要な情報だけ渡す
    前準備を分離して後続処理を単純化する
    2022/2/9 12

    View full-size slide

  13. 荷物を預かり引換券を渡す
    大きな情報を持ち歩くのをやめて
    いったんデータベースに記録し、引換券(キー)を渡す
    ヘッダー情報はそのまま引き渡していく
    手荷物預かりサービス データ渡しを単純化する
    2022/2/9 13

    View full-size slide

  14. データ形式の正規化
    形式がふぞろいのデータを
    共通の形式に変換して後続処理に渡す
    前準備を分離して後続処理を単純化する
    2022/2/9 14

    View full-size slide

  15. Web アプリケーション設計とEIP
    • EIP のパターンはクラス設計の参考になる
    • 特に、アプリケーション層・プレゼンテーション層・データ
    ソース層では、メッセージ処理の考え方がいろいろ使える
    • 非同期メッセージング方式の導入もやりやすくなる
    2022/2/9 15

    View full-size slide