共有されたモデルの重要性
from Introducing Domain-Driven Design
問題を解決する前に、問題を正しく理解することが重要である。
そのためには、ドメインエキスパートと開発チーム、その他のステークホルダー、そしてソースコードがすべて同一のモデルを共有することが重要である。
これにより、ドメインエキスパートのメンタルモデルをコードへ翻訳するのでなく、直接反映されるように
これが DDD の最終目標
https://scrapbox.io/files/6577f4427f7caf00232cbb45.png
このように、ソフトウェアモデルをビジネスドメインと整合することは、以下のようなメリットがある。
市場投入までの時間削減
エンジニアとコードが、ドメインエキスパートと同じモデルを共有していることで、適切な解決手段を迅速に開発できる
より多くのビジネス価値の創出
問題に的確に沿ったソリューションは、顧客満足度を高める
無駄を減らす
要件が明確になり、誤解や手戻りに費やす無駄な時間を減らせる
どのコンポーネントの価値が高いかが明確になる
これにより、開発コストをそのコンポーネントに集中させるなどの戦略を取りやすい
メンテナンスの進化が容易
ドメインエキスパート自身のモデルとコードで表現されたモデルが一致することで、コードへの変更が容易になり、エラーの発生も少なくなる
また、新しいメンバは早く慣れることができる
したがって、最初に共有モデルを作る必要がある。
DDD のコミュニティでは、役立つガイドラインを開発している。
データ構造よりも、ビジネスイベントやワークフローに焦点を当てる
ビジネスイベントを通じてドメインを理解する
ドメインをより小さいサブドメインに分割する
ドメインをサブドメインに分割する
解決空間となる各サブドメインのモデルを作成する
境界づけられたコンテキストを利用した解決手段の作成
共通言語(ユビキタス言語)を作り、プロジェクト開発者全員で共有する
ユビキタス言語の創造