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
『ドメイン駆動設計をはじめよう』中核の業務領域
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
増田 亨
PRO
August 29, 2024
Programming
11
4.5k
『ドメイン駆動設計をはじめよう』中核の業務領域
オライリージャパン発行の『ドメイン駆動設計をはじめよう』の解説スライドです。
このスライドでは、本書の設計の考え方の軸である「中核の業務領域」に焦点を合わせて説明します。
増田 亨
PRO
August 29, 2024
Tweet
Share
More Decks by 増田 亨
See All by 増田 亨
AI時代のシステム設計:ドメインモデルで変更しやすさを守る設計戦略
masuda220
PRO
6
1.1k
競争優位を生み出す戦略的内製開発の実践技法
masuda220
PRO
3
580
ソフトウェア設計の課題・原則・実践技法
masuda220
PRO
28
24k
乱雑なコードの整理から学ぶ設計の初歩
masuda220
PRO
37
17k
ドメイン駆動設計のエッセンス
masuda220
PRO
19
8.6k
開発組織の戦略的な役割と 設計スキル向上の効果
masuda220
PRO
12
2.6k
ソフトウェア設計の実践的な考え方
masuda220
PRO
6
1.1k
技術書を効果的に内面化する実践技法
masuda220
PRO
33
12k
開発チーム・開発組織の設計改善スキルの向上
masuda220
PRO
21
13k
Other Decks in Programming
See All in Programming
Migration to Signals, Signal Forms, Resource API, and NgRx Signal Store @Angular Days 03/2026 Munich
manfredsteyer
PRO
0
130
「接続」—パフォーマンスチューニングの最後の一手 〜点と点を結ぶ、その一瞬のために〜
kentaroutakeda
3
1.7k
Angular-Apps smarter machen mit Gen AI: Lokal und offlinefähig - Hands-on Workshop!
christianliebel
PRO
0
130
How to stabilize UI tests using XCTest
akkeylab
0
140
[SF Ruby Feb'26] The Silicon Heel
palkan
0
120
条件判定に名前、つけてますか? #phperkaigi #c
77web
2
670
Codex の「自走力」を高める
yorifuji
0
1.3k
ベクトル検索のフィルタを用いた機械学習モデルとの統合 / python-meetup-fukuoka-06-vector-attr
monochromegane
2
500
Vuetify 3 → 4 何が変わった?差分と移行ポイント10分まとめ
koukimiura
0
170
Rethinking API Platform Filters
vinceamstoutz
0
140
モックわからないマン卒業記 ~振る舞いを起点に見直した、フロントエンドテストにおけるモックの使いどころ~
tasukuwatanabe
3
410
DevinとClaude Code、SREの現場で使い倒してみた件
karia
1
1.1k
Featured
See All Featured
From π to Pie charts
rasagy
0
150
So, you think you're a good person
axbom
PRO
2
2k
Building the Perfect Custom Keyboard
takai
2
720
Practical Orchestrator
shlominoach
191
11k
Designing Experiences People Love
moore
143
24k
The Curse of the Amulet
leimatthew05
1
10k
Thoughts on Productivity
jonyablonski
75
5.1k
The Spectacular Lies of Maps
axbom
PRO
1
640
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.7k
The Invisible Side of Design
smashingmag
302
51k
The Cult of Friendly URLs
andyhume
79
6.8k
The Language of Interfaces
destraynor
162
26k
Transcript
中核の業務領域 2024年8月29日 有限会社システム設計 増田 亨 1 BPStudy #204 ~ドメイン駆動設計をはじめよう 『ドメイン駆動設計をはじめよう』
自己紹介 業務系アプリケーションソフトウェアの開発者 モデル駆動設計 Java/Spring Boot/IntelliJ IDEA/JIG 有限会社システム設計 代表 since 2003
コミューン株式会社 技術アドバイザ since 2023 2 増田 亨(ますだ とおる) 著書(2017) 訳書(2024)
『ドメイン駆動設計をはじめよう』 Amazon.comで高評価(★4.6, 302review) “Learning Domain-Driven Design” の全訳 「ドメイン駆動設計を実践するために 最初に手にするべき1冊!」 by
出版社 ドメイン駆動設計抜きにしても、よいことが書いてある by もう一人の訳者綿引さん 3 ソフトウェアの実装と事業戦略を結びつける実践技法
この本を特徴づける三つのキーワード ①中核の業務領域 ②区切られた文脈 ③分散型アーキテクチャ 4 今日の発表の中心 (モデルと言葉の一貫性) (通信方式、マイクロサービス、イベント駆動、データメッシュ)
中核の業務領域 5 Core Subdomain
中核の業務領域 事業活動の中で競争優位を生み出す活動 事業活動を中核、補完、一般に三分類する • エヴァンス本にはでてこない考え方 • ヴァーノン本で提示された考え方をさらに発展させた感じ この三分類から設計方針を決める 6
「はじめに」xxixより “この本で学んでほしいことは、 ソフトウェア設計と事業方針を 密接に関係づけることの効果です。” 7 事業方針の核心が競争優位、そことソフトウェア設計を整合させる
設計 判断 本書の構成:事業方針とソフトウェア設計 8 事業活動 課題 課題 仕組み 仕組み 関係者
開発者が理解 トランザクション スクリプト アクティブ レコード ドメイン モデル イベント履歴式 ドメインモデル 値オブジェクト 集約 業務サービス レイヤード ポートと アダプター CQRS Web API メッセージング 送信箱 サーガ プロセス マネージャー イベント駆動型 アーキテクチャ マイクロ サービス データメッシュ トランザクション ロールバック 排他制御 テスト戦略 イベント ストーミング 大きな リファクタリング (第1章~第4章) 設計の選択肢(第5章~第16章) (第10章、付録A) 実践知 競争優位
ソフトウェア設計と事業方針 この本の考え方 1. ソフトウェアを開発する目的は事業を成長させること 2. 事業を成長させるためには、ソフトウェアの修正と拡張が必要 3. 設計と事業方針が結びつけば、変更が楽で安全になる 9 こういう視点で、ソフトウェア設計の考え方とやり方を説明している本
技術的な実装方法だけを学びたいなら、適切な本ではない
ソフトウェアの実装と 事業戦略を結びつける方法 10
基本的なやり方 11 事業活動全体を複数の業務領域に分解 それぞれの業務領域を事業戦略の視点から 三つのカテゴリーに分類 業務領域のカテゴリーが決まれば 業務ロジックの実装方法が決まる 業務ロジックの実装方法が決まれば アプリケーションの技術方式が決まる 業務ロジックの実装方法が決まれば
テスト方針が決まる 第1ステップ 第2ステップ 第3ステップ 第4ステップ 第5ステップ ここがキモ!
事業活動を業務領域に分解する 事業活動(ドメイン) • 顧客にどんな価値を提供しているか • どうやってその価値を提供しているか • 競合他社とどうやって差別化し競争優位を生み出し維持するか 業務領域(サブドメイン) •
事業活動の領域全体を細分化したもの • すべての業務領域が一体となって顧客に価値を提供する • 販売促進、販売、顧客サービス、出荷、在庫、会計、財務、人事、… 12
業務領域のカテゴリーを特定する 13 二軸で分類 ・競合他社との差別化 ・業務ロジックの複雑さ 中核に重点的に取り組む(事業価値が最も高い) 一般はパッケージやクラウドサービスを検討 補完はできるだけ手間をかけずにすませる 中核
事業戦略の視点から業務領域を分類 中核の業務領域 • 競争優位の源泉 • 競合他社が簡単にまねができない独自のやり方 • 業務ロジックは必然的に複雑になる • 進化し続ける(競争優位を維持し続ける)ことが必要
一般的な業務領域 • 他社と同じやり方でよい • 業務ロジックは複雑だが進化させる必要ない • この領域を独自に開発すべきではない 補完的な業務領域 • 自社独自のやり方が必要 • 業務ロジックは単純(CRUDやETL) 14 業務領域の細分化と 三つのカテゴリーへの分類が 設計判断の基本枠組みとなる
三つのカテゴリーの比較 中核 一般 補完 競争優位 〇 × × 複雑さ 〇
〇 × 変化 〇 × × 実装 内製 購入 外注 15
業務ロジックの実装方法の選択 16 (第5章) (第6章) (第7章) (第1章) 中核の 業務領域
業務領域のカテゴリーから 業務ロジックの実装方法が決まると 17 アプリケーションの技術方式が決まる テストの基本方針が決まる (第8章) (第10章)
業務領域の分類の具体例(第1章) 18 中核(競争優位) • 推薦エンジン • データの匿名化 • モバイルアプリ 一般
• 暗号化 • 会計 • 決済 • 認証と認可 補完 • 音楽ストリーミングサービスとの連係 • SNSとの連携 • ライブ参加履歴の管理 中核(競争優位) • 運行経路の選択 • 利用者の行動分析 • モバイルアプリ • 車両の管理 一般 • 交通状況 • 会計 • 請求 • 認証と認可 補完 • クーポン発行 • クーポンの有効性チェック ライブチケットのオンライン販売事業 相乗りタクシー型ミニバスサービス こういう事業分析や業務知識の具体例が多いのがこの本の価値
事業の成長と ソフトウェアの成長 19 (第11章 設計を進化させる)
業務領域のカテゴリーは変化する 20 事業が成長すれば、業務領域の カテゴリーは変化する 業務領域のカテゴリーの変化に応じて 設計方針を変える
業務領域のカテゴリーに合わせた設計 21 (第1章) (第5章) (第6章) (第7章) 中核の 業務領域
区切られた文脈 22 Bounded Context <時間があれば>
区切られた文脈 • 3章 事業活動の複雑さに立ち向かう • 言葉が同じ意味で通用する範囲 • モデルの一貫性を維持するための境界 • 一つのチームが責任をもって取り組む範囲
23
第一の学び:「同じ言葉」の効果 24 業務知識が欠落するソフトウェア開発 業務知識が豊富なソフトウェア開発 同じ言葉 (業務の言葉) (第2章)
第二の学び:「区切られた文脈」の効果 25 • 同じ言葉の通用する範囲 • モデルの境界 • 開発単位の境界 • チームの責任範囲の境界
複雑さを扱うために 文脈を区切る (第3章)
分散型アーキテクチャと ドメイン駆動設計 26 <時間があれば> こういう内容も書かれています(4章、9章、14章、15章、16章)
第4章 区切られた文脈どうしの連係 27 対等の関係 力関係が片寄った関係
文脈の地図(連係の全体像) 28 この地図からわかること ・顧客管理が中核の業務領域 ・それ以外は一般または補完 中核モデルの独自性を 保護するための設計判断
第9章 通信 29 (区切られた文脈どうしの連係を実装する技術方式)
ドメイン駆動設計と分散型アーキテクチャ 30 マイクロサービスアーキテクチャ (第14章) イベント駆動型アーキテクチャ (第15章) データメッシュ (第16章) 区切られた文脈の考え方で取り組む