- DDDは「正解集」ではなかった
- モデルとは「ルールを閉じ込める場所」だった
- Repositoryは「境界の翻訳者」だった
- DDDは「チームで悩むための言語」だった
- DDDは「使わない判断」も含んでいる
- おわりに
この本を通して、DDDについて多くの言葉が登場しました。
- Entity
- Value Object
- Repository
- UseCase
- 境界
- モデル
- 共通言語
しかし、ここで一度立ち止まって確認したいことがあります。
この本が本当に伝えたかったのは、
これらの言葉そのものではない
という点です。
最終章では、これまでの内容を振り返りながら、 DDDとどう付き合っていくとよいのかを、改めて整理します。
DDDは「正解集」ではなかった
第一章から一貫して述べてきた通り、DDDは
- 正解を与える設計論
- そのまま使える設計テンプレート
ではありません。
むしろDDDは、
設計について考え続けるための視点の集合
です。
- なぜここに置いたのか
- なぜこの責務は重く感じるのか
- なぜこの変更が怖いのか
そうした問いを、 曖昧な感覚のままにせず、 言葉として扱えるようにする。
それがDDDの本質でした。
モデルとは「ルールを閉じ込める場所」だった
本書では何度も、
- EntityかVOか
- どこからモデルにするか
という話題が出てきました。
しかし、結論はとてもシンプルです。
モデルとは、守りたいルールを閉じ込めるための器
です。
- 変わってほしくない振る舞い
- 破られると困る制約
- 他の場所に漏れると危険な判断
それらが見え始めたとき、 初めてモデルは意味を持ちます。
最初から立派なモデルを作る必要はありません。
必要になったときに、必要な分だけ導入する
それが、実務に耐えるDDDでした。
Repositoryは「境界の翻訳者」だった
Repositoryについても、
- 薄くするべきか
- ロジックを持つべきか
といった議論を扱いました。
ここで大切なのは、
Repositoryはドメインと技術の境界に立つ存在
だという点です。
- UseCase側にはドメインの言葉がある
- 実装側にはDBやAPIの都合がある
Repositoryは、その両者を
お互いに汚染させないための翻訳層
として機能します。
「薄い/厚い」という言葉に引きずられるよりも、
- どこまでをドメインとして守りたいか
- どこからを技術的詳細として隔離したいか
を考えることの方が重要でした。
DDDは「チームで悩むための言語」だった
DDDは、 個人の設計力を高めるだけのものではありません。
むしろ、
チームで設計について悩むための言語
として使われたとき、 最も効果を発揮します。
- 何がつらいのか
- どこが壊れやすいのか
- なぜこの変更が怖いのか
こうした感覚を、
- 境界
- 責務
- モデル
といった言葉で共有できるようになる。
DDDが提供する価値は、
結論を揃えることではなく、 悩み方を揃えること
でした。
DDDは「使わない判断」も含んでいる
この本では、 あえて次のことも強調してきました。
- すべてにDDDを適用しない
- 単純なものは単純に書く
- 途中でやめる判断を恐れない
DDDは、
設計を複雑にするための理論ではありません
変更を楽にするための手段です。
もしDDDを使った結果、
- 読みにくくなった
- 触りにくくなった
- 説明が難しくなった
のであれば、 それは立ち止まるサインです。
DDDから離れる勇気もまた、 DDDを理解した結果なのです。
おわりに
ここまで、DDDという言葉を手がかりに、 設計について考えてきました。
この文章は何かを結論づけるために 書いたものではありません。
設計に向き合う中で感じた違和感や迷いを、 そのままにせず、 一度立ち止まって言葉にしてみる。
DDDは、そのための 一つの枠組みとして存在すると考えています。
設計は、 時間とともに変わります。
コードも、 要求も、 チームも変わり続けます。
その中で、
- 何を守ろうとしたのか
- なぜこの形を選んだのか
を思い出せる手がかりが、 どこかに残っていることは、 きっと無駄にはなりません。
この文章もまた、 そうした手がかりの一つとして残します。