Successfully reported this slideshow.
Your SlideShare is downloading. ×

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

More Related Content

Slideshows for you

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

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

×