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