ドメイン駆動設計実践ガイド
ドメイン駆動設計
の概要
特徴的なのは以下の3点
複雑なビジネスロジック
に焦点を合わせる
これが
ドメイン駆動設計
においてユニークである.
ビジネスルール
売上
の最大化と
コスト
の最小化のための適切な行動の刺激と不適切な行動の制限をするための
ルール
であり,
ビジネスロジック
とは異なり
ソフトウェア
の外側にあるもの.
ビジネスロジック
とは
ソフトウェア
として表現された
ビジネスルール
である.
競争優位性
を生み出す
ビジネスロジック
(=
複雑なビジネスロジック
)に注力するということ.
変更や修正が頻繁に起こるため,
拡張
や
修正
が容易であることが求められる.
限られた時間であればこの
複雑なビジネスロジック
に
リソース
を割くことが
費用対効果
の高い行動である.
ビジネスロジック
を
UI
や
データベース
・
通信
などと分離することで
コード
が単純になる.
複雑なビジネスロジック
を特定することで重要な
UI
・重要な
通信
・重要な
ビジネスデータ
を特定できる.
モデル
に基づいて
設計
する
複雑なビジネスロジック
を理解し整理するために
モデル
を作成して簡略化する.
モデル
は要約であり抽象化である.
モデル
は2種類に分類できる
分析モデル
ビジネス
を理解するための
モデル
設計モデル
ソフトウェア
を作成するための
モデル
ドメイン駆動設計
では
分析モデル
と
設計モデル
を一致させることに価値を置く.
ビジネスルール
の
構造
と
ソフトウェア
の
構造
を一致させること.
リファクタリング
を頻繁に行う
ドメインエキスパート
と
ソフトウェア
担当とがお互いの
知識
を持ち寄って
モデル
と
設計
の改善を繰り返す.
設計モデル
の
リファクタリング
が
分析モデル
を改善し,
分析モデル
の改善が
設計モデル
の改善につながる.
双方向からの
リファクタリング
で
分析モデル
と
設計モデル
の一致を目指す.
あくまで
リファクタリング
の対象は
複雑なビジネスロジック
である.
戦略的設計
と
戦術的設計
戦略的設計
: 全体を構成する要素をどう連携させるかを検討するための手法.
ユビキタス言語
境界付けられたコンテキスト
コンテキストマップ
コアドメイン
戦術的設計
:
複雑なビジネスロジック
を
ソフトウェア
で表現するための
設計
手法
エンティティ
値オブジェクト
集約
モジュール
軽量DDD
戦術的設計
のみを,全体またはごく一部のみ取り入れること.また
戦略的設計
に取り組まないこと.
asRagi.icon
戦略的設計
の理解を進めたい.
基礎となる手法は
ユビキタス言語
と
値オブジェクト
である
ユビキタス言語
が
分析モデル
と
設計モデル
を一致させる基礎となる.
中核となる
設計
手法は,
戦略的設計
では
コアドメイン
,
戦術的設計
では
集約
である.
コアドメイン
こそ
ドメイン駆動設計
で注力するべき
実装
であり,その他の部分は可能な限り必要最小限の
設計
と
実装
で済ませるべきである.
全体を関連づける
設計
手法は,
戦略的設計
では
コンテキストマップ
であり,
戦術的設計
では
モジュール
である.
Repository
を用いよう.
ユビキタス言語
ドメイン駆動設計
の肝は
ドメインエキスパート
との協業にある.
ドメインエキスパート
との協力によって
コアドメイン
の理解が深まり,重要な箇所および手を抜いても良い箇所がより鮮明になる.
ユビキタス言語を作る