SlideShare a Scribd company logo
1 of 21
Download to read offline
ドメイン駆動設計
15年の取り組みでわかったこと
2020年3月30日(月)
(有)システム設計 増田 亨
2020/3/30 1
BPStudy #151
ドメイン駆動設計とは?
✓ソフトウェアのさまざまな設計スタイルの一つ
✓ソフトウェアの複雑さをどう扱うかの考え方とやり方
✓重要な複雑さは「ユーザのビジネス活動」に起因する
このビジネス活動に起因する複雑さに立ち向かうために
✓ドメインモデルを使って設計する
✓ドメインモデルを使ってコミュニケーションを促進する
2020/3/30 2
ドメインモデル
意思疎通
意図の伝達
設計・実装
促進する 駆動する
2020/3/30 3
ドメインモデル
意思疎通
意図の伝達
設計・実装
促進する 駆動する
ユビキタス言語
ドメイン
エキスパート
境界づけられた
コンテキスト
コアドメイン コンテキストマップ
値オブジェクト 集約
エンティティ
リポジトリ
2020/3/30 4
2020/3/30 5
15年前の自分
わけがわからん…
① ビジネスルール
② 値オブジェクト
③ 型
15年の取り組みでわかったこと
2020/3/30 6
ドメインの最も複雑な側面はビジネスルール
ドメイン
ビジネスの決め事
(ビジネスルール)
焦点を合わせる
ユーザのビジネス活動の領域
アプリケーションが関係する領域
アプリケーション開発に必要な知識の領域
ビジネス活動を刺激し制約する決め事
起きている事実の表現・記録・通知の約束事
事実を使った計算・判断のロジック
2020/3/30 7
ドメインモデル
意思疎通
意図の伝達
設計・実装
促進する 駆動する
ユビキタス言語
ドメイン
エキスパート
境界づけられた
コンテキスト
コアドメイン コンテキストマップ
値オブジェクト 集約
エンティティ
リポジトリ
2020/3/30 8
ドメインモデル
ビジネスの決め事
の整理
意思疎通
ビジネスの決め事
の共通理解
設計・実装
ビジネスの決め事
の表現
促進する 駆動する
ユビキタス言語
ビジネスの
決め事の表現
ドメイン
エキスパート
境界づけられた
コンテキスト
コアドメイン コンテキストマップ
値オブジェクト 集約
エンティティ
リポジトリ
ビジネスの決め事に
詳しい人
ビジネスの決め事の
通用する範囲
ビジネスの決め事の体系重要なビジネスの決め事
単純な事実の表現と
計算・判断ロジック
複合的な事実の表現と
計算・判断ロジック2020/3/30 9
2020/3/30 10
ソフトウェア開発のやり方を変える
ソフトウェア開発
2020/3/23 ©有限会社システム設計 11
開発範囲
品質
開発期間
総工数(=費用)
要件定義
仕様化
実装
ドキュメント
ソースコード
開発手順
開発体制
モジュール構造
要素技術
目標・制約 活動
成果物
プロセス
技術方式
ドメイン駆動設計
2020/3/23 ©有限会社システム設計 12
開発範囲
品質
開発期間
総工数(=費用)
要件定義
仕様化
実装
ドキュメント
ソースコード
開発手順
開発体制
モジュール構造
要素技術
目標・制約 活動
成果物
プロセス
技術方式
継ぎ目をなくす
ソースコード中心
手続き的
アプリ固有の型を定義
アーキテクチャ:三層+ドメインロジック層
アプリケーション層
データソース層
プレゼンテーション層
ビジネスルールを
表現するモジュール群
画面
API
データベース操作
外部連携
機能の実行
計算・判断
記録・参照・通知
2020/2/28 13
ドメインロジック層
2020/3/30 14
ビジネスルール駆動のソフトウェア開発
2020/3/30 15
ビジネスルールの発見と整理
モデルベース要件定義 RDRA 2.0
神崎さんの要件定義手法
kindle版 無償
2020/3/30 16
RDRA 2.0 ビジネスルールの可視化
バリエーション
(区分、種類、…)
計算ロジック 判定表
(バリエーションの
組み合わせ)
業務のバリエーション
商品、顧客などのバリエーション
状態遷移
2020/3/30 17
2020/3/30 18
ビジネスルールを表現するオブジェクトの設計
集約
ビジネスルールをソフトウェアで表現する
バリエーション
(区分、種類、…)
計算ロジック
判定表
(バリエーションの
組み合わせ)
区分オブジェクト
値オブジェクト
コレクション
オブジェクト
単純な事実を使った計算・判断
複合した事実を
組み合わせた計算・判断
バリエーションごとの計算・判断
Map, Set, Listを使った
計算や判定
2020/3/30 19
ビジネスルールを表現する独自の型
値の種類 独自の型の候補
数値系 ○○額、○○率、○○数、○○量、…
日付や時間 ○○日、○○時刻、○○期間、○○日数、…
区分 ○○区分、○○種類、○○グループ、○○カテゴリ、…
状態 ○○済、○○中、○○待、…
文脈 〇〇規定、○○ポリシー、○○プラン、…
集約
区分オブジェクト
値オブジェクト
コレクション
オブジェクト
手続き的なモジュール構造(トランザクションスクリプト)だと、
これらを使った計算や判断のロジックが断片化し重複する
独自の型(クラス)に計算・判断ロジックを
閉じ込めると、ビジネスルールを
単一定義できる(断片化や重複を防止)
2020/3/30 20
ビジネスルールを型で表現する効果
✓ソースコード上にビジネスルールを明確に表現できる
✓計算判断ロジックを一か所にカプセル化できる
✓型の参照関係から変更の影響範囲を正確に把握できる
✓よりよいモデルと設計に向かうリファクタリングがやりやすい
https://github.com/system-sekkei/library
RDRA 2.0 ハンドブック
図書館サンプルの実装例
2020/3/30 21

More Related Content

What's hot

What's hot (20)

DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1  ドメイン駆動設計の基本を理解する3週連続DDDその1  ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
 
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
 
ドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイルドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイル
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース
 
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解するドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
 
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
 
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
 
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探しリッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
 
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門
 
ドメイン駆動設計という仕事の流儀
ドメイン駆動設計という仕事の流儀ドメイン駆動設計という仕事の流儀
ドメイン駆動設計という仕事の流儀
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
 
実践に向けたドメイン駆動設計のエッセンス
実践に向けたドメイン駆動設計のエッセンス実践に向けたドメイン駆動設計のエッセンス
実践に向けたドメイン駆動設計のエッセンス
 
ドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイントドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイント
 
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くかDDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
 
ソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考えるソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考える
 
3週連続DDDその3 ドメイン駆動設計 戦略的設計
3週連続DDDその3  ドメイン駆動設計 戦略的設計3週連続DDDその3  ドメイン駆動設計 戦略的設計
3週連続DDDその3 ドメイン駆動設計 戦略的設計
 
ドメイン駆動設計 コアドメインを語り合ってみよう
ドメイン駆動設計 コアドメインを語り合ってみようドメイン駆動設計 コアドメインを語り合ってみよう
ドメイン駆動設計 コアドメインを語り合ってみよう
 

Similar to ドメイン駆動設計に15年取り組んでわかったこと

M12_数百台の開発サーバをリフトアンドシフト! Azure Migrate 活用ポイント [Microsoft Japan Digital Days]
M12_数百台の開発サーバをリフトアンドシフト! Azure Migrate 活用ポイント [Microsoft Japan Digital Days]M12_数百台の開発サーバをリフトアンドシフト! Azure Migrate 活用ポイント [Microsoft Japan Digital Days]
M12_数百台の開発サーバをリフトアンドシフト! Azure Migrate 活用ポイント [Microsoft Japan Digital Days]
日本マイクロソフト株式会社
 

Similar to ドメイン駆動設計に15年取り組んでわかったこと (20)

Aws Dev Day2021 「ドメイン駆動設計のマイクロサービスへの活用とデベロッパーに求められるスキル」参考資料(松岡パート)
Aws Dev Day2021 「ドメイン駆動設計のマイクロサービスへの活用とデベロッパーに求められるスキル」参考資料(松岡パート)Aws Dev Day2021 「ドメイン駆動設計のマイクロサービスへの活用とデベロッパーに求められるスキル」参考資料(松岡パート)
Aws Dev Day2021 「ドメイン駆動設計のマイクロサービスへの活用とデベロッパーに求められるスキル」参考資料(松岡パート)
 
M12_数百台の開発サーバをリフトアンドシフト! Azure Migrate 活用ポイント [Microsoft Japan Digital Days]
M12_数百台の開発サーバをリフトアンドシフト! Azure Migrate 活用ポイント [Microsoft Japan Digital Days]M12_数百台の開発サーバをリフトアンドシフト! Azure Migrate 活用ポイント [Microsoft Japan Digital Days]
M12_数百台の開発サーバをリフトアンドシフト! Azure Migrate 活用ポイント [Microsoft Japan Digital Days]
 
ウェブサイト運用プロデューサーによる提案型クリエイティブパートナーシップ構築
ウェブサイト運用プロデューサーによる提案型クリエイティブパートナーシップ構築ウェブサイト運用プロデューサーによる提案型クリエイティブパートナーシップ構築
ウェブサイト運用プロデューサーによる提案型クリエイティブパートナーシップ構築
 
DeNA内製ゲームエンジンの現状と目指す未来 #denatechcon
DeNA内製ゲームエンジンの現状と目指す未来 #denatechconDeNA内製ゲームエンジンの現状と目指す未来 #denatechcon
DeNA内製ゲームエンジンの現状と目指す未来 #denatechcon
 
元ITコンサルタントの目から見た「ITにおける今までのデザインとこれからのデザイン」
元ITコンサルタントの目から見た「ITにおける今までのデザインとこれからのデザイン」元ITコンサルタントの目から見た「ITにおける今までのデザインとこれからのデザイン」
元ITコンサルタントの目から見た「ITにおける今までのデザインとこれからのデザイン」
 
melonDesignerの説明
melonDesignerの説明melonDesignerの説明
melonDesignerの説明
 
Mautic最新情報と始め方 - IDCFクラウド&Bluemix 合同Meetup!in つくば vol.3
Mautic最新情報と始め方 - IDCFクラウド&Bluemix 合同Meetup!in つくば vol.3Mautic最新情報と始め方 - IDCFクラウド&Bluemix 合同Meetup!in つくば vol.3
Mautic最新情報と始め方 - IDCFクラウド&Bluemix 合同Meetup!in つくば vol.3
 
JAWS-UG東京 - 2019-09-26 - Gateway祭
JAWS-UG東京 - 2019-09-26 - Gateway祭JAWS-UG東京 - 2019-09-26 - Gateway祭
JAWS-UG東京 - 2019-09-26 - Gateway祭
 
これって、ドメイン駆動設計?
これって、ドメイン駆動設計?これって、ドメイン駆動設計?
これって、ドメイン駆動設計?
 
[PrimeCloud Controller / OSS MeetUp] CloudConductorのご紹介
[PrimeCloud Controller / OSS MeetUp] CloudConductorのご紹介[PrimeCloud Controller / OSS MeetUp] CloudConductorのご紹介
[PrimeCloud Controller / OSS MeetUp] CloudConductorのご紹介
 
【de:code 2020】 開発者が語る! Microsoft Teams アプリケーション開発の実例とコツ
【de:code 2020】 開発者が語る! Microsoft Teams アプリケーション開発の実例とコツ【de:code 2020】 開発者が語る! Microsoft Teams アプリケーション開発の実例とコツ
【de:code 2020】 開発者が語る! Microsoft Teams アプリケーション開発の実例とコツ
 
とあるメーカーのRedmine活用事例
とあるメーカーのRedmine活用事例とあるメーカーのRedmine活用事例
とあるメーカーのRedmine活用事例
 
【de:code 2020】 IT インフラをモダナイズ?今、検討すべきクラウドの活用方法
【de:code 2020】 IT インフラをモダナイズ?今、検討すべきクラウドの活用方法【de:code 2020】 IT インフラをモダナイズ?今、検討すべきクラウドの活用方法
【de:code 2020】 IT インフラをモダナイズ?今、検討すべきクラウドの活用方法
 
3Dリッチコンテンツビジネス活用のご提案ver3.1
3Dリッチコンテンツビジネス活用のご提案ver3.13Dリッチコンテンツビジネス活用のご提案ver3.1
3Dリッチコンテンツビジネス活用のご提案ver3.1
 
Layout isfirstprocessofatomicdesign
Layout isfirstprocessofatomicdesignLayout isfirstprocessofatomicdesign
Layout isfirstprocessofatomicdesign
 
CloudConductorのアーキテクチャ
CloudConductorのアーキテクチャCloudConductorのアーキテクチャ
CloudConductorのアーキテクチャ
 
クラウド座談会資料
クラウド座談会資料クラウド座談会資料
クラウド座談会資料
 
グロース施策でもUX活動を絶やさないために。UXとアジャイルの交差点と、他職種混合チームの今後
グロース施策でもUX活動を絶やさないために。UXとアジャイルの交差点と、他職種混合チームの今後グロース施策でもUX活動を絶やさないために。UXとアジャイルの交差点と、他職種混合チームの今後
グロース施策でもUX活動を絶やさないために。UXとアジャイルの交差点と、他職種混合チームの今後
 
WEBデザイナーのためのエディタ入門 先生:金澤 直毅
WEBデザイナーのためのエディタ入門 先生:金澤 直毅WEBデザイナーのためのエディタ入門 先生:金澤 直毅
WEBデザイナーのためのエディタ入門 先生:金澤 直毅
 
Webデザイナーのためのエディタ入門
Webデザイナーのためのエディタ入門Webデザイナーのためのエディタ入門
Webデザイナーのためのエディタ入門
 

More from 増田 亨

More from 増田 亨 (19)

ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善
 
事業活動モデル・システム機能モデル・ビジネスロジックの記述
事業活動モデル・システム機能モデル・ビジネスロジックの記述事業活動モデル・システム機能モデル・ビジネスロジックの記述
事業活動モデル・システム機能モデル・ビジネスロジックの記述
 
ドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドラインドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドライン
 
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来
 
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primerオブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
 
プロダクトづくりのためのソフトウェア設計スタイル
プロダクトづくりのためのソフトウェア設計スタイルプロダクトづくりのためのソフトウェア設計スタイル
プロダクトづくりのためのソフトウェア設計スタイル
 
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチレガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
 
ビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かうビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かう
 
ソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かうソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かう
 
アジャイルなソフトウェア設計を目指して
アジャイルなソフトウェア設計を目指してアジャイルなソフトウェア設計を目指して
アジャイルなソフトウェア設計を目指して
 
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かすドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす
 
SoR 2.0 summary
SoR 2.0 summarySoR 2.0 summary
SoR 2.0 summary
 
毎日が越境だ!
毎日が越境だ!毎日が越境だ!
毎日が越境だ!
 
SoR 2.0 基幹システムの再定義と再構築
SoR 2.0 基幹システムの再定義と再構築SoR 2.0 基幹システムの再定義と再構築
SoR 2.0 基幹システムの再定義と再構築
 
越境する情シス:進化可能なアーキテクチャを手に入れる
越境する情シス:進化可能なアーキテクチャを手に入れる越境する情シス:進化可能なアーキテクチャを手に入れる
越境する情シス:進化可能なアーキテクチャを手に入れる
 
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイルドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
 
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
 
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
 

ドメイン駆動設計に15年取り組んでわかったこと