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
増田 亨
PRO
August 29, 2024
Programming
6
1.4k
『ドメイン駆動設計をはじめよう』中核の業務領域
オライリージャパン発行の『ドメイン駆動設計をはじめよう』の解説スライドです。
このスライドでは、本書の設計の考え方の軸である「中核の業務領域」に焦点を合わせて説明します。
増田 亨
PRO
August 29, 2024
Tweet
Share
More Decks by 増田 亨
See All by 増田 亨
『ドメイン駆動設計をはじめよう』のモデリングアプローチ
masuda220
PRO
8
540
現場で役立つモデリング 超入門
masuda220
PRO
15
3.2k
ソフトウェアの実装と事業戦略を結びつける
masuda220
PRO
19
7.1k
ソフトウェア設計と生成AI
masuda220
PRO
15
3.6k
ドメイン駆動設計の実践
masuda220
PRO
30
11k
いまどきの分析設計パターン10選
masuda220
PRO
37
13k
大きな泥団子に立ち向かう
masuda220
PRO
30
13k
開発活動の参照モデルを使ったベンチマーキングと最適化
masuda220
PRO
6
820
設計の知識と技能で駆動するソフトウェア開発
masuda220
PRO
26
21k
Other Decks in Programming
See All in Programming
A Journey of Contribution and Collaboration in Open Source
ivargrimstad
0
890
Nurturing OpenJDK distribution: Eclipse Temurin Success History and plan
ivargrimstad
0
880
Remix on Hono on Cloudflare Workers
yusukebe
1
280
アジャイルを支えるテストアーキテクチャ設計/Test Architecting for Agile
goyoki
9
3.3k
Enabling DevOps and Team Topologies Through Architecture: Architecting for Fast Flow
cer
PRO
0
320
AI時代におけるSRE、 あるいはエンジニアの生存戦略
pyama86
6
1.1k
距離関数を極める! / SESSIONS 2024
gam0022
0
280
レガシーシステムにどう立ち向かうか 複雑さと理想と現実/vs-legacy
suzukihoge
14
2.2k
GitHub Actionsのキャッシュと手を挙げることの大切さとそれに必要なこと
satoshi256kbyte
5
430
ヤプリ新卒SREの オンボーディング
masaki12
0
130
Laravel や Symfony で手っ取り早く OpenAPI のドキュメントを作成する
azuki
2
110
聞き手から登壇者へ: RubyKaigi2024 LTでの初挑戦が 教えてくれた、可能性の星
mikik0
1
130
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
654
59k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
28
2k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.5k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
Optimising Largest Contentful Paint
csswizardry
33
2.9k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.8k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Music & Morning Musume
bryan
46
6.2k
Product Roadmaps are Hard
iamctodd
PRO
49
11k
Teambox: Starting and Learning
jrom
133
8.8k
Building an army of robots
kneath
302
43k
GitHub's CSS Performance
jonrohan
1030
460k
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章) 区切られた文脈の考え方で取り組む