SlideShare a Scribd company logo
Submit Search
Upload
Login
Signup
ドメイン駆動設計に15年取り組んでわかったこと
Report
増田 亨
Follow
ソフトウェアシステムの設計・構築 at システム設計
Mar. 30, 2020
•
0 likes
•
10,004 views
1
of
21
ドメイン駆動設計に15年取り組んでわかったこと
Mar. 30, 2020
•
0 likes
•
10,004 views
Download Now
Download to read offline
Report
Software
ドメイン駆動設計の要点は3つ。ビジネスルール・値オブジェクト・型
増田 亨
Follow
ソフトウェアシステムの設計・構築 at システム設計
Recommended
正しいものを正しく作る塾-設計コース
増田 亨
9.5K views
•
9 slides
ドメイン駆動で開発する ラフスケッチから実装まで
増田 亨
15.6K views
•
103 slides
ドメイン駆動設計 ( DDD ) をやってみよう
増田 亨
50K views
•
45 slides
世界でいちばんわかりやすいドメイン駆動設計
増田 亨
14.4K views
•
44 slides
ドメイン駆動設計 基本を理解する
増田 亨
117.3K views
•
134 slides
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
20.1K views
•
41 slides
More Related Content
What's hot
3週連続DDDその3 ドメイン駆動設計 戦略的設計
増田 亨
14.7K views
•
89 slides
ソフトウェア開発のやり方の改善
増田 亨
6.6K views
•
26 slides
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
94.7K views
•
76 slides
ドメイン駆動設計の学習曲線とブレークポイント
増田 亨
8.2K views
•
39 slides
ドメイン駆動設計 の 実践 Part3 DDD
増田 亨
8.7K views
•
23 slides
ドメイン駆動設計 本格入門
増田 亨
44.4K views
•
139 slides
What's hot
(20)
3週連続DDDその3 ドメイン駆動設計 戦略的設計
増田 亨
•
14.7K views
ソフトウェア開発のやり方の改善
増田 亨
•
6.6K views
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
•
94.7K views
ドメイン駆動設計の学習曲線とブレークポイント
増田 亨
•
8.2K views
ドメイン駆動設計 の 実践 Part3 DDD
増田 亨
•
8.7K views
ドメイン駆動設計 本格入門
増田 亨
•
44.4K views
ドメイン駆動設計の正しい歩き方
増田 亨
•
25.2K views
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
•
137.9K views
ドメインオブジェクトの見つけ方・作り方・育て方
増田 亨
•
30.3K views
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
Atsuo AOKI
•
24.1K views
ドメイン駆動設計(DDD)の実践Part2
増田 亨
•
12.8K views
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
•
48.1K views
ソフトウェア設計の学び方を考える
増田 亨
•
25K views
マイクロにしすぎた結果がこれだよ!
mosa siru
•
132.1K views
ドメイン駆動設計のためのオブジェクト指向入門
増田 亨
•
47.9K views
ドメイン駆動設計入門
Takuya Kitamura
•
44.3K views
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
•
64.9K views
シリコンバレーの「何が」凄いのか
Atsushi Nakada
•
183.4K views
ドメイン駆動設計 コアドメインを語り合ってみよう
増田 亨
•
2.5K views
マイクロサービスにおける 結果整合性との戦い
ota42y
•
12.3K views
Similar to ドメイン駆動設計に15年取り組んでわかったこと
Aws Dev Day2021 「ドメイン駆動設計のマイクロサービスへの活用とデベロッパーに求められるスキル」参考資料(松岡パート)
Koichiro Matsuoka
589 views
•
29 slides
M12_数百台の開発サーバをリフトアンドシフト! Azure Migrate 活用ポイント [Microsoft Japan Digital Days]
日本マイクロソフト株式会社
483 views
•
27 slides
ドメイン駆動設計とは何か 【入門編】
増田 亨
13.2K views
•
40 slides
ウェブサイト運用プロデューサーによる提案型クリエイティブパートナーシップ構築
COPILOT Inc.
2.1K views
•
6 slides
DeNA内製ゲームエンジンの現状と目指す未来 #denatechcon
DeNA
3K views
•
43 slides
元ITコンサルタントの目から見た「ITにおける今までのデザインとこれからのデザイン」
Fixel Inc.
103 views
•
81 slides
Similar to ドメイン駆動設計に15年取り組んでわかったこと
(20)
Aws Dev Day2021 「ドメイン駆動設計のマイクロサービスへの活用とデベロッパーに求められるスキル」参考資料(松岡パート)
Koichiro Matsuoka
•
589 views
M12_数百台の開発サーバをリフトアンドシフト! Azure Migrate 活用ポイント [Microsoft Japan Digital Days]
日本マイクロソフト株式会社
•
483 views
ドメイン駆動設計とは何か 【入門編】
増田 亨
•
13.2K views
ウェブサイト運用プロデューサーによる提案型クリエイティブパートナーシップ構築
COPILOT Inc.
•
2.1K views
DeNA内製ゲームエンジンの現状と目指す未来 #denatechcon
DeNA
•
3K views
元ITコンサルタントの目から見た「ITにおける今までのデザインとこれからのデザイン」
Fixel Inc.
•
103 views
melonDesignerの説明
Hisashi Sakai
•
619 views
Mautic最新情報と始め方 - IDCFクラウド&Bluemix 合同Meetup!in つくば vol.3
Kohei Nishikawa
•
667 views
JAWS-UG東京 - 2019-09-26 - Gateway祭
Yutaro Ono
•
687 views
これって、ドメイン駆動設計?
Michitaka Yumoto
•
17.4K views
[PrimeCloud Controller / OSS MeetUp] CloudConductorのご紹介
cloudconductor
•
873 views
【de:code 2020】 開発者が語る! Microsoft Teams アプリケーション開発の実例とコツ
日本マイクロソフト株式会社
•
238 views
とあるメーカーのRedmine活用事例
Shinji Tamura
•
5.7K views
【de:code 2020】 IT インフラをモダナイズ?今、検討すべきクラウドの活用方法
日本マイクロソフト株式会社
•
161 views
3Dリッチコンテンツビジネス活用のご提案ver3.1
ITDORAKU
•
643 views
Layout isfirstprocessofatomicdesign
Takao Tetsuro
•
166 views
CloudConductorのアーキテクチャ
cloudconductor
•
1.6K views
.NETで始めるIoT開発
Takashi Matsuoka
•
1.2K views
クラウド座談会資料
知礼 八子
•
2.2K views
グロース施策でもUX活動を絶やさないために。UXとアジャイルの交差点と、他職種混合チームの今後
Tomoko Nishina
•
8 views
More from 増田 亨
事業活動モデル・システム機能モデル・ビジネスロジックの記述
増田 亨
1.5K views
•
7 slides
ドメインオブジェクトの設計ガイドライン
増田 亨
3.5K views
•
10 slides
オブジェクト指向プログラミングの現在・過去・未来
増田 亨
6.6K views
•
39 slides
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
増田 亨
13.8K views
•
43 slides
ドメイン駆動設計という設計スタイル
増田 亨
17.4K views
•
63 slides
プロダクトづくりのためのソフトウェア設計スタイル
増田 亨
4.6K views
•
29 slides
More from 増田 亨
(20)
事業活動モデル・システム機能モデル・ビジネスロジックの記述
増田 亨
•
1.5K views
ドメインオブジェクトの設計ガイドライン
増田 亨
•
3.5K views
オブジェクト指向プログラミングの現在・過去・未来
増田 亨
•
6.6K views
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
増田 亨
•
13.8K views
ドメイン駆動設計という設計スタイル
増田 亨
•
17.4K views
プロダクトづくりのためのソフトウェア設計スタイル
増田 亨
•
4.6K views
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
増田 亨
•
3.7K views
マイクロサービス 4つの分割アプローチ
増田 亨
•
41K views
ビジネスルールの複雑さに立ち向かう
増田 亨
•
12.2K views
ソフトウェアの核心にある複雑さに立ち向かう
増田 亨
•
10.6K views
DDD sample code explained in Java
増田 亨
•
21.6K views
アジャイルなソフトウェア設計を目指して
増田 亨
•
12.2K views
ドメイン駆動設計をゲーム開発に活かす
増田 亨
•
4.7K views
SoR 2.0 summary
増田 亨
•
1.3K views
毎日が越境だ!
増田 亨
•
10.5K views
SoR 2.0 基幹システムの再定義と再構築
増田 亨
•
9.1K views
越境する情シス:進化可能なアーキテクチャを手に入れる
増田 亨
•
5.8K views
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
増田 亨
•
4K views
現場で役立つシステム設計の原則
増田 亨
•
8.5K views
現場で役立つシステム設計の原則
増田 亨
•
6.3K views
Recently uploaded
LTは検証の場.pptx
ssuserfcafd1
232 views
•
10 slides
【JSTQB_ALTM】シラバス第3章
ssusercd6d02
26 views
•
27 slides
socialcast.pdf
ストランダー
15 views
•
30 slides
Ansible入門.pptx
洵貴 佐川
196 views
•
13 slides
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf
耕二 阿部
17 views
•
59 slides
ハイエンド〜ローエンドまで、「Enlighten」による効率的リアルタイムグローバルイルミネーション|CEDEC2023
Silicon Studio Corporation
27 views
•
48 slides
Recently uploaded
(6)
LTは検証の場.pptx
ssuserfcafd1
•
232 views
【JSTQB_ALTM】シラバス第3章
ssusercd6d02
•
26 views
socialcast.pdf
ストランダー
•
15 views
Ansible入門.pptx
洵貴 佐川
•
196 views
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf
耕二 阿部
•
17 views
ハイエンド〜ローエンドまで、「Enlighten」による効率的リアルタイムグローバルイルミネーション|CEDEC2023
Silicon Studio Corporation
•
27 views
ドメイン駆動設計に15年取り組んでわかったこと
1.
ドメイン駆動設計 15年の取り組みでわかったこと 2020年3月30日(月) (有)システム設計 増田 亨 2020/3/30
1 BPStudy #151
2.
ドメイン駆動設計とは? ✓ソフトウェアのさまざまな設計スタイルの一つ ✓ソフトウェアの複雑さをどう扱うかの考え方とやり方 ✓重要な複雑さは「ユーザのビジネス活動」に起因する このビジネス活動に起因する複雑さに立ち向かうために ✓ドメインモデルを使って設計する ✓ドメインモデルを使ってコミュニケーションを促進する 2020/3/30 2
3.
ドメインモデル 意思疎通 意図の伝達 設計・実装 促進する 駆動する 2020/3/30 3
4.
ドメインモデル 意思疎通 意図の伝達 設計・実装 促進する 駆動する ユビキタス言語 ドメイン エキスパート 境界づけられた コンテキスト コアドメイン コンテキストマップ 値オブジェクト
集約 エンティティ リポジトリ 2020/3/30 4
5.
2020/3/30 5 15年前の自分 わけがわからん…
6.
① ビジネスルール ② 値オブジェクト ③
型 15年の取り組みでわかったこと 2020/3/30 6
7.
ドメインの最も複雑な側面はビジネスルール ドメイン ビジネスの決め事 (ビジネスルール) 焦点を合わせる ユーザのビジネス活動の領域 アプリケーションが関係する領域 アプリケーション開発に必要な知識の領域 ビジネス活動を刺激し制約する決め事 起きている事実の表現・記録・通知の約束事 事実を使った計算・判断のロジック 2020/3/30 7
8.
ドメインモデル 意思疎通 意図の伝達 設計・実装 促進する 駆動する ユビキタス言語 ドメイン エキスパート 境界づけられた コンテキスト コアドメイン コンテキストマップ 値オブジェクト
集約 エンティティ リポジトリ 2020/3/30 8
9.
ドメインモデル ビジネスの決め事 の整理 意思疎通 ビジネスの決め事 の共通理解 設計・実装 ビジネスの決め事 の表現 促進する 駆動する ユビキタス言語 ビジネスの 決め事の表現 ドメイン エキスパート 境界づけられた コンテキスト コアドメイン コンテキストマップ 値オブジェクト
集約 エンティティ リポジトリ ビジネスの決め事に 詳しい人 ビジネスの決め事の 通用する範囲 ビジネスの決め事の体系重要なビジネスの決め事 単純な事実の表現と 計算・判断ロジック 複合的な事実の表現と 計算・判断ロジック2020/3/30 9
10.
2020/3/30 10 ソフトウェア開発のやり方を変える
11.
ソフトウェア開発 2020/3/23 ©有限会社システム設計 11 開発範囲 品質 開発期間 総工数(=費用) 要件定義 仕様化 実装 ドキュメント ソースコード 開発手順 開発体制 モジュール構造 要素技術 目標・制約
活動 成果物 プロセス 技術方式
12.
ドメイン駆動設計 2020/3/23 ©有限会社システム設計 12 開発範囲 品質 開発期間 総工数(=費用) 要件定義 仕様化 実装 ドキュメント ソースコード 開発手順 開発体制 モジュール構造 要素技術 目標・制約
活動 成果物 プロセス 技術方式 継ぎ目をなくす ソースコード中心 手続き的 アプリ固有の型を定義
13.
アーキテクチャ:三層+ドメインロジック層 アプリケーション層 データソース層 プレゼンテーション層 ビジネスルールを 表現するモジュール群 画面 API データベース操作 外部連携 機能の実行 計算・判断 記録・参照・通知 2020/2/28 13 ドメインロジック層
14.
2020/3/30 14 ビジネスルール駆動のソフトウェア開発
15.
2020/3/30 15 ビジネスルールの発見と整理
16.
モデルベース要件定義 RDRA 2.0 神崎さんの要件定義手法 kindle版
無償 2020/3/30 16
17.
RDRA 2.0 ビジネスルールの可視化 バリエーション (区分、種類、…) 計算ロジック
判定表 (バリエーションの 組み合わせ) 業務のバリエーション 商品、顧客などのバリエーション 状態遷移 2020/3/30 17
18.
2020/3/30 18 ビジネスルールを表現するオブジェクトの設計
19.
集約 ビジネスルールをソフトウェアで表現する バリエーション (区分、種類、…) 計算ロジック 判定表 (バリエーションの 組み合わせ) 区分オブジェクト 値オブジェクト コレクション オブジェクト 単純な事実を使った計算・判断 複合した事実を 組み合わせた計算・判断 バリエーションごとの計算・判断 Map, Set, Listを使った 計算や判定 2020/3/30
19
20.
ビジネスルールを表現する独自の型 値の種類 独自の型の候補 数値系 ○○額、○○率、○○数、○○量、… 日付や時間
○○日、○○時刻、○○期間、○○日数、… 区分 ○○区分、○○種類、○○グループ、○○カテゴリ、… 状態 ○○済、○○中、○○待、… 文脈 〇〇規定、○○ポリシー、○○プラン、… 集約 区分オブジェクト 値オブジェクト コレクション オブジェクト 手続き的なモジュール構造(トランザクションスクリプト)だと、 これらを使った計算や判断のロジックが断片化し重複する 独自の型(クラス)に計算・判断ロジックを 閉じ込めると、ビジネスルールを 単一定義できる(断片化や重複を防止) 2020/3/30 20
21.
ビジネスルールを型で表現する効果 ✓ソースコード上にビジネスルールを明確に表現できる ✓計算判断ロジックを一か所にカプセル化できる ✓型の参照関係から変更の影響範囲を正確に把握できる ✓よりよいモデルと設計に向かうリファクタリングがやりやすい https://github.com/system-sekkei/library RDRA 2.0 ハンドブック 図書館サンプルの実装例 2020/3/30
21