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.3k
アプリケーションの設計にEIPの知識が役に立つよ!
非同期メッセージングを使ったインテグレーションパターン (EIP)は、クラス設計にも参考になるものが多い。
すぐに非同期メッセージングを使わないとしても、EIPは設計の参考情報として知っておきたい。
増田 亨
PRO
February 09, 2022
Tweet
Share
More Decks by 増田 亨
See All by 増田 亨
ソフトウェア設計とAI技術の活用
masuda220
PRO
25
7.3k
AI時代の『ドメイン駆動設計をはじめよう』
masuda220
PRO
38
18k
事業戦略を理解してソフトウェアを設計する
masuda220
PRO
26
6.9k
これだけは知っておきたいクラス設計の基礎知識 version 2
masuda220
PRO
27
8.1k
ビジネスモデリング道場 目的と背景
masuda220
PRO
12
1.9k
ソフトウェアエンジニアの成長
masuda220
PRO
14
2.6k
分散型アーキテクチャとドメイン駆動設計
masuda220
PRO
9
3.8k
ソフトウェア開発の複雑さに立ち向かう
masuda220
PRO
13
16k
『ドメイン駆動設計をはじめよう』のモデリングアプローチ
masuda220
PRO
9
1.2k
Other Decks in Programming
See All in Programming
「次に何を学べばいいか分からない」あなたへ──若手エンジニアのための学習地図
panda_program
3
710
バイブスあるコーディングで ~PHP~ 便利ツールをつくるプラクティス
uzulla
1
320
Scale out your Claude Code ~自社専用Agentで10xする開発プロセス~
yukukotani
4
810
Workers を定期実行する方法は一つじゃない
rokuosan
0
140
MCPで実現できる、Webサービス利用体験について
syumai
7
2.4k
AWS Summit Japan 2024と2025の比較/はじめてのKiro、今あなたは岐路に立つ
satoshi256kbyte
1
260
Amazon Q CLI開発で学んだAIコーディングツールの使い方
licux
3
170
GUI操作LLMの最新動向: UI-TARSと関連論文紹介
kfujikawa
0
410
#QiitaBash TDDで(自分の)開発がどう変わったか
ryosukedtomita
1
350
Terraform やるなら公式スタイルガイドを読もう 〜重要項目 10選〜
hiyanger
11
2.8k
変化を楽しむエンジニアリング ~ いままでとこれから ~
murajun1978
0
660
0から始めるモジュラーモノリス-クリーンなモノリスを目指して
sushi0120
0
250
Featured
See All Featured
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
The World Runs on Bad Software
bkeepers
PRO
70
11k
Documentation Writing (for coders)
carmenintech
73
5k
Scaling GitHub
holman
461
140k
Making Projects Easy
brettharned
117
6.3k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Fireside Chat
paigeccino
38
3.6k
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.9k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.8k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
6k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
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