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
6.4k
アプリケーションの設計にEIPの知識が役に立つよ!
非同期メッセージングを使ったインテグレーションパターン (EIP)は、クラス設計にも参考になるものが多い。
すぐに非同期メッセージングを使わないとしても、EIPは設計の参考情報として知っておきたい。
増田 亨
PRO
February 09, 2022
Tweet
Share
More Decks by 増田 亨
See All by 増田 亨
ソフトウェア設計の課題・原則・実践技法
masuda220
PRO
21
16k
乱雑なコードの整理から学ぶ設計の初歩
masuda220
PRO
32
14k
ドメイン駆動設計のエッセンス
masuda220
PRO
17
8k
開発組織の戦略的な役割と 設計スキル向上の効果
masuda220
PRO
10
2.3k
ソフトウェア設計の実践的な考え方
masuda220
PRO
5
930
技術書を効果的に内面化する実践技法
masuda220
PRO
32
11k
開発チーム・開発組織の設計改善スキルの向上
masuda220
PRO
21
12k
ソフトウェア設計とAI技術の活用
masuda220
PRO
31
8.7k
AI時代の『ドメイン駆動設計をはじめよう』
masuda220
PRO
43
20k
Other Decks in Programming
See All in Programming
AI時代もSEOを頑張っている話
shirahama_x
0
160
All(?) About Point Sets
hole
0
210
AI 時代だからこそ抑えたい「価値のある」PHP ユニットテストを書く技術 #phpconfuk / phpcon-fukuoka-2025
shogogg
1
580
Level up your Gemini CLI - D&D Style!
palladius
1
110
競馬で学ぶ機械学習の基本と実践 / Machine Learning with Horse Racing
shoheimitani
14
13k
CloudflareのSandbox SDKを試してみた
syumai
0
180
Nitro v3
kazupon
2
320
Flutterチームから作る組織の越境文化
findy_eventslides
0
570
Java_プロセスのメモリ監視の落とし穴_NMT_で見抜けない_glibc_キャッシュ問題_.pdf
ntt_dsol_java
0
230
開発生産性が組織文化になるまでの軌跡
tonegawa07
0
190
モデル駆動設計をやってみよう Modeling Forum2025ワークショップ/Let’s Try Model-Driven Design
haru860
0
180
TVerのWeb内製化 - 開発スピードと品質を両立させるまでの道のり
techtver
PRO
3
1.2k
Featured
See All Featured
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Visualization
eitanlees
150
16k
Fireside Chat
paigeccino
41
3.7k
Faster Mobile Websites
deanohume
310
31k
Designing for humans not robots
tammielis
254
26k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
Statistics for Hackers
jakevdp
799
230k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
11
940
The World Runs on Bad Software
bkeepers
PRO
72
12k
How STYLIGHT went responsive
nonsquared
100
5.9k
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