ドメイン駆動設計は何を解決する手法なのか?
ドメイン駆動設計が解決したい課題は?
顧客満足度低下による利益減
本当に顧客が求めているものをつくれているのか?
開発コスト増大による利益減
技術的負債が酷すぎて機能追加が難しすぎる...
ドメイン駆動設計は何を目指すのか?
機能性向上
サービスの競争優位性がチームに理解されており、競争優位性を高め続けられている状態
継続的に利益が増大し続けている状態
変更容易性向上
技術的負債に苦しめられることなく、いつでも迅速に機能を実装し、リリースし続けている状態
どのようにしてそれらを達成するのか?
原則
コアドメインに集中すること
ドメインの実践者とソフトウェアの実践者による創造的な共同作業を通じて、モデルを探究すること
明示的な境界づけられたコンテキストの内部で、ユビキタス言語を語ること
妨害要因
そもそもコアドメインがわからない
サブドメインのロジックと混在し蜜結合となっている
コアドメインのロジックが散在し、低凝縮となっている
DBロジック/Viewロジックとの蜜結合
コアドメインの価値を高めるために
問題領域ごとにサブシステムに分割する
階層型アーキテクチャ
各種設計パターンの活用
モデルの深化
hr.icon
DDDが解決したい課題は、大きくは以下2つです。
顧客満足度低下による利益減:「今作ってるもの、本当に顧客に喜ぶものなの…?」と疑問に感じながらの開発が常態化。そしてやっぱり顧客にウケない。顧客離れが起き、稼げなくなる。
開発コスト増大による利益減:「この機能を実装したら顧客にウケることは間違いないんだ、でも技術的負債があまりにも酷すぎて機能追加が難しすぎる!」……開発生産性が悪化し、リリースまでの時間やコストが増大。折角の利益が膨大な開発コストによって相殺されてしまう。