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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
増田 亨
PRO
February 09, 2022
Programming
17
6.5k
アプリケーションの設計にEIPの知識が役に立つよ!
非同期メッセージングを使ったインテグレーションパターン (EIP)は、クラス設計にも参考になるものが多い。
すぐに非同期メッセージングを使わないとしても、EIPは設計の参考情報として知っておきたい。
増田 亨
PRO
February 09, 2022
Tweet
Share
More Decks by 増田 亨
See All by 増田 亨
AI時代のシステム設計:ドメインモデルで変更しやすさを守る設計戦略
masuda220
PRO
5
960
競争優位を生み出す戦略的内製開発の実践技法
masuda220
PRO
3
570
ソフトウェア設計の課題・原則・実践技法
masuda220
PRO
28
24k
乱雑なコードの整理から学ぶ設計の初歩
masuda220
PRO
37
17k
ドメイン駆動設計のエッセンス
masuda220
PRO
19
8.5k
開発組織の戦略的な役割と 設計スキル向上の効果
masuda220
PRO
12
2.6k
ソフトウェア設計の実践的な考え方
masuda220
PRO
6
1k
技術書を効果的に内面化する実践技法
masuda220
PRO
33
12k
開発チーム・開発組織の設計改善スキルの向上
masuda220
PRO
21
13k
Other Decks in Programming
See All in Programming
Vuetify 3 → 4 何が変わった?差分と移行ポイント10分まとめ
koukimiura
0
130
文字コードの話
qnighy
44
17k
コーディングルールの鮮度を保ちたい / keep-fresh-go-internal-conventions
handlename
0
200
nilとは何か 〜interfaceの構造とnil!=nilから理解する〜
kuro_kurorrr
3
1.9k
「やめとこ」がなくなった — 1月にZennを始めて22本書いた AI共創開発のリアル
atani14
0
380
野球解説AI Agentを開発してみた - 2026/02/27 LayerX社内LT会資料
shinyorke
PRO
0
280
Cyrius ーLinux非依存にコンテナをネイティブ実行する専用OSー
n4mlz
0
140
AIに任せる範囲を安全に広げるためにやっていること
fukucheee
0
130
Ruby and LLM Ecosystem 2nd
koic
1
680
AI時代でも変わらない技術コミュニティの力~10年続く“ゆるい”つながりが生み出す価値
n_takehata
2
730
ふつうの Rubyist、ちいさなデバイス、大きな一年
bash0c7
0
920
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
320
Featured
See All Featured
For a Future-Friendly Web
brad_frost
183
10k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
200
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.4k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
830
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
150
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
1
1.3k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
9.9k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
470
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
220
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.1k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
150
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