Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
アプリケーションの設計にEIPの知識が役に立つよ!
Search
増田 亨
PRO
February 09, 2022
Programming
16
5.8k
アプリケーションの設計にEIPの知識が役に立つよ!
非同期メッセージングを使ったインテグレーションパターン (EIP)は、クラス設計にも参考になるものが多い。
すぐに非同期メッセージングを使わないとしても、EIPは設計の参考情報として知っておきたい。
増田 亨
PRO
February 09, 2022
Tweet
Share
More Decks by 増田 亨
See All by 増田 亨
『ドメイン駆動設計をはじめよう』中核の業務領域
masuda220
PRO
5
920
ソフトウェアの実装と事業戦略を結びつける
masuda220
PRO
18
6.6k
ソフトウェア設計と生成AI
masuda220
PRO
15
3.3k
ドメイン駆動設計の実践
masuda220
PRO
27
9.6k
いまどきの分析設計パターン10選
masuda220
PRO
35
12k
大きな泥団子に立ち向かう
masuda220
PRO
24
5.3k
開発活動の参照モデルを使ったベンチマーキングと最適化
masuda220
PRO
6
700
設計の知識と技能で駆動するソフトウェア開発
masuda220
PRO
26
21k
マネジメントの知識がドメイン駆動設計を加速する.pdf
masuda220
PRO
2
720
Other Decks in Programming
See All in Programming
全部見せます! クラシルリワードのSwiftTesting移行プロジェクト
uetyo
0
160
【TID2024】模擬講義:プログラマと一緒にゲームをデザインしてみよう!
akatsukigames_tech
0
480
REXML改善のその後
naitoh
0
160
XStateでReactに秩序を与えたい
gizm000
0
530
Method Swizzlingを行うライブラリにおけるマルチモジュール設計
yoshikma
0
110
ECMAScript、Web標準の型はどう管理されているか / How ECMAScript and Web standards types are maintained
petamoriken
3
380
What we keep in mind when migrating from Serverless Framework to AWS CDK and AWS SAM
kasacchiful
1
130
iOSの隠されたAPIを解明し、開発効率を向上させる方法/iOSDC24
noppefoxwolf
2
130
Swiftで高速フーリエ変換してオーディオビジュアライザーを作る / iOSDC Japan 2024 Day1 Track D
kyome22
3
500
状態管理ライブラリZustandの導入から運用まで
k1tikurisu
2
320
Ruby Parser progress report 2024
yui_knk
2
200
1人で挑むSwiftコンパイラ 〜型システム入門編〜
s_shimotori
0
320
Featured
See All Featured
Pencils Down: Stop Designing & Start Developing
hursman
118
11k
The Cost Of JavaScript in 2023
addyosmani
40
5.2k
Infographics Made Easy
chrislema
239
18k
Keith and Marios Guide to Fast Websites
keithpitt
408
22k
Being A Developer After 40
akosma
83
580k
10 Git Anti Patterns You Should be Aware of
lemiorhan
653
58k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
230
17k
How to Think Like a Performance Engineer
csswizardry
16
930
How GitHub (no longer) Works
holman
310
140k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
25
2k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
278
13k
Unsuck your backbone
ammeep
667
57k
Transcript
アプリケーションの設計に EIPの知識が役に立つよ! 2022年2月9日 有限会社 システム設計 増田 亨 現場から学ぶモデル駆動設計 第10回 2022/2/9
1
アプリケーション間の連携 • いま時は、Webアプリケーションは孤立していることはほとん どなく、他のサービスと連携している • 連携方法は“Web API”(HTTP リクエスト/レスポンス)の同 期方式が主流 •
非同期メッセージング “pub/sub”も連携方式の選択肢として だいぶ使いやすくなってきたが、普及はこれから 2022/2/9 2
アプリケーション設計とメッセージ処理 • Webアプリケーションは、HTTPリクエストやHTTPレスポン スをメッセージと考えると、メッセージ処理の一形態 • データベース操作も、レコードをメッセージと考えるとメッ セージ処理の一形態 • 非同期メッセージングのミドルウェアやサービスを使わなくて も、EIPはアプリケーションの設計パターンとして参考になる
2022/2/9 3
Web アプリケーション設計とEIP • EIP のパターンはクラス設計の参考になる • 特にアプリケーション層・プレゼンテーション層・データソー ス層では、EIPのメッセージ処理の考え方がいろいろ使える • 私がクラス設計によく使うEIPのパターンを8つ紹介します
2022/2/9 4
処理の構造化(クラスの役割分担)のパターン 2022/2/9 5
関心事の分離:並列化 プロセスマネージャー リクエスト たばね役に 専念するクラス 機能特化の クラス群 ひとつのクラスでなんでもかんでも 抱え込まないようする 機能の追加・修正が楽で安全
2022/2/9 6
関心事の分離:直列化 リクエスト 通知/記録 パイプとフィルター 前処理クラス 中間処理クラス 後処理クラス ・段階ごとに別のクラスが処理をする ・呼び出しは void型のメソッド
(リターン値はない、副作用があることの明示) ・中断は例外を発生させる ・例:データベースへの書き込み、メール送信による通知 機能の追加・修正が楽で安全 2022/2/9 7
関心の分離:分岐 リクエスト 分岐判定に 専念するクラス 適切なクラス/外部サービス に処理を任せる コンテントベースの経路分岐 機能の追加・修正が楽で安全 ・分岐役と処理役の分離 リクエストの内容により
分岐先を切り替える (ディスパッチャー) 2022/2/9 8
ソース⇒分割⇒振分け⇒個別処理⇒集約 インバウンド アウトバウンド 複合メッセージの処理 ひとつのメッセージに複数の情報が混在している時 最初に分割して処理を振り分け、結果を集約する 最初に分割して中間を単純化 2022/2/9 9
メッセージ内容(情報)の扱い方のパターン 2022/2/9 10
エンリッチ:必要な情報を付加する ユーザーIDを受け取り、ユーザ情報を付加して後続処理に渡す 予約番号を受け取り、予約内容を付加して後続処理に渡す 前準備を分離して後続処理を単純化する 2022/2/9 11
フィルター:不要な情報を取り除く ひとつのメッセージが多様な情報を含んでいる時 後続処理に必要な情報だけ渡す 前準備を分離して後続処理を単純化する 2022/2/9 12
荷物を預かり引換券を渡す 大きな情報を持ち歩くのをやめて いったんデータベースに記録し、引換券(キー)を渡す ヘッダー情報はそのまま引き渡していく 手荷物預かりサービス データ渡しを単純化する 2022/2/9 13
データ形式の正規化 形式がふぞろいのデータを 共通の形式に変換して後続処理に渡す 前準備を分離して後続処理を単純化する 2022/2/9 14
Web アプリケーション設計とEIP • EIP のパターンはクラス設計の参考になる • 特に、アプリケーション層・プレゼンテーション層・データ ソース層では、メッセージ処理の考え方がいろいろ使える • 非同期メッセージング方式の導入もやりやすくなる
2022/2/9 15