- 失敗パターン1:最初から「正しいDDD」をやろうとする
- 失敗パターン2:用語を揃えずにコードだけDDDにする
- 失敗パターン3:UseCaseを薄くしすぎる
- 失敗パターン4:モデルにルールを閉じ込めすぎる
- 失敗パターン5:DDDを全体に一律適用する
- 失敗パターン6:「DDDっぽさ」を評価軸にする
- この章のまとめ
ここまでの章で、DDDが「何を大切にしているか」はかなり明確になってきたはずです。
それでもなお、DDDは失敗します。 しかもその多くは、
- 理解不足
- 技術力不足
ではありません。
「DDDをやろうとしたから」失敗する
この章では、実務で本当によく見かけるDDDの失敗パターンを整理します。
失敗例を知ることは、 正解例を増やすよりも、ずっと設計判断の精度を上げてくれます。
失敗パターン1:最初から「正しいDDD」をやろうとする
最も多く、最も破壊力のある失敗です。
- Entity / Value Object を最初から作り込む
- Aggregate を先に決める
- Repository をすべて interface に切る
設計としては「教科書的」に見えます。
しかし実務では、
- ルールがまだ分からない
- 境界もまだ曖昧
- 将来の変更も見えていない
この状態で完成形を目指すと、
想定外の変更に耐えられない設計
が出来上がります。
DDDは「完成形から逆算する設計」ではありません。 変化し始めたところに追従する設計です。
失敗パターン2:用語を揃えずにコードだけDDDにする
DDDの中核にあるのは、コードではなく言葉です。
それにもかかわらず、
- クラス名だけDDDっぽい
- メソッド名がユースケースとズレている
- チーム内で同じ概念を別の言葉で呼んでいる
こうした状態でDDDを導入すると、
見た目はDDD、中身はカオス
になります。
言葉が揃っていない設計は、
- レビューで揉める
- 仕様変更の議論が噛み合わない
という形で、確実に破綻します。
失敗パターン3:UseCaseを薄くしすぎる
「UseCaseは薄くあるべき」という言葉が、 誤って伝わると起きる失敗です。
- UseCaseがRepositoryを呼ぶだけ
- 判断はすべてモデルに押し込む
一見きれいですが、
- 処理の流れが追えない
- どこで何が起きているか分からない
状態になります。
UseCaseは、
やりたいことの物語を書く場所
です。
薄くする対象は「責務」であって、 存在感そのものではありません。
失敗パターン4:モデルにルールを閉じ込めすぎる
第8章で述べた内容の裏返しです。
- 画面固有の判断
- 一時的な仕様
- 今回だけの例外
こうしたロジックまでモデルに入れると、
- モデルが巨大化する
- 変更が怖くなる
結果として、
「触れないモデル」
が生まれます。
モデルは、
- 概念の整合性を守る場所
であって、
- すべての判断を引き受ける場所
ではありません。
失敗パターン5:DDDを全体に一律適用する
これも非常によくある失敗です。
- すべての画面
- すべての機能
- すべてのCRUD
にDDDを適用しようとする。
結果として、
- 開発速度が落ちる
- 学習コストが爆発する
- チームが疲弊する
DDDは、
壊れたら困るところにだけ使う設計
です。
割り切りのないDDDは、 プロジェクトを壊します。
失敗パターン6:「DDDっぽさ」を評価軸にする
レビューで、こんな言葉が出始めたら危険信号です。
- それDDDっぽくないよね
- もっとドメイン寄りにすべきでは?
この評価軸は、
設計を宗教に変える
力を持っています。
DDDの評価軸は、ただ一つです。
- 変更が入ったときに助けてくれるか
それ以外の指標は、 すべて二次的です。
この章のまとめ
DDDの失敗は、
- 技術が足りないから
- 知識が足りないから
起きるのではありません。
多くの場合、
真面目にやりすぎた結果
として起きます。
DDDは、
- 厳密である必要はありません
- 完璧である必要もありません
ただ、
変化に備えるための考え方
であり続けること。
それを忘れなければ、 DDDは必ず実務の味方になります。
次の章では、 ここまでの理解を踏まえたうえで、 「ではDDDをどう学び、どう付き合っていくか」 という、より長期的な視点に進みます。