- DDD は「最初から完成させるもの」ではない
- いきなりドメイン層を作らない
- 境界を 1 箇所だけ決める
- 言葉を揃えるところから始める
- リファクタリング前提の設計
- 小さく始めた DDD は、あとから育てられる
- この章のまとめ
DDD は「最初から完成させるもの」ではない
DDD という言葉には、どうしても「最初にきれいな構造を作らなければならない」という印象がつきまといます。
- ドメイン層を用意する
- UseCase を定義する
- Repository を抽象化する
- Entity を厳密に設計する
これらを 一気に やろうとした瞬間、設計は重くなります。 そして多くの場合、その重さに耐えきれず、DDD は「途中で放置される構造」になります。
本書が提案する DDD の始め方は、その逆です。
最初から正解を作らない。 あとで壊す前提で、小さく置く。
いきなりドメイン層を作らない
DDD を始めようとすると、真っ先にやりたくなるのが「domain パッケージを作ること」です。 しかし、これはもっとも失敗しやすい第一歩でもあります。
理由は単純です。
- 何がドメインなのか、まだ分かっていない
- どこが変わりやすいか、まだ見えていない
- 判断とロジックがどこに集まるか、まだ確信がない
この状態でドメイン層を作ると、そこはすぐに “よく分からないコード置き場” になります。
本書では、次のような始め方を推奨します。
- まずは ViewModel と Repository だけで作る
- 判断ロジックを「ここ怪しいな」と思う場所に集める
- それが固まり始めたら、初めて「ここがドメインだ」と名付ける
ドメインは作るものではなく、浮かび上がってくるもの です。
境界を 1 箇所だけ決める
DDD を導入しようとすると、つい「すべての境界を正しく引こう」としてしまいます。
- UI と Domain
- Domain と Data
- UseCase と Repository
- Entity と Model
しかし、最初から全部やる必要はありません。
最初にやるべきことは、たった一つです。
「ここだけは守る」という境界を 1 箇所だけ決めること
たとえば、
- Repository に判断を書かない
- ViewModel にビジネスルールを書かない
- UI から DataSource を直接触らない
どれでも構いません。
重要なのは、境界の数ではなく、理由が説明できるかどうか です。
1 箇所でも「ここを越えない」と決められると、設計は自然と整理され始めます。
言葉を揃えるところから始める
DDD というと、クラス設計やパッケージ構成に意識が向きがちですが、もっと簡単で、もっと効果的な入り口があります。
それが 言葉を揃えること です。
- この「状態」は何を指しているのか
- 「有効」と「利用可能」は同じ意味か
- 「未設定」と「空」はどう違うのか
これらが曖昧なまま実装が進むと、どんなに構造を整えても設計は崩れます。
逆に言えば、
- 仕様書
- 会話
- コメント
- 変数名
ここで使われる言葉が揃ってくると、設計は勝手にそれっぽい形になります。
DDD はコードを書く前から始まっています。 そして、言葉を揃えるのは、もっともコストが低く、効果が高い第一歩です。
リファクタリング前提の設計
本書で一貫している前提があります。
Android アプリの設計は、必ず後から壊される。
- 仕様は変わる
- UI は変わる
- API は変わる
- 優先度も変わる
この現実を無視して「完成形」を目指すと、設計はすぐに破綻します。
だからこそ、本書では次の姿勢を強く推奨します。
- 最初は雑でもいい
- でも、意図は残す
- 壊すときに理由を説明できる構造にする
リファクタリング前提で設計するというのは、「いい加減に作る」ことではありません。
「どこを壊すかが分かるように作る」 ということです。
小さく始めた DDD は、あとから育てられる
DDD は、一度導入に失敗すると「もう二度とやりたくないもの」になりがちです。 その多くは、最初からやりすぎたことが原因です。
- 型を揃えすぎた
- 層を作りすぎた
- 将来を考えすぎた
本書が勧めるのは、その真逆です。
- まず 1 箇所だけ守る
- 言葉を揃える
- 判断が集まったら名前をつける
この順序で始めた DDD は、途中で投げたくならない し、 必要になったときにだけ、自然に拡張できます。
この章のまとめ
DDD を Android に持ち込むときに、もっとも重要なのは、
- 小さく始めること
- 最初から正解を求めないこと
- 壊す前提で作ること
です。
DDD は、導入した瞬間に価値を生むものではありません。 変更が起きたときに、初めて差が出る設計思想 です。
次章では、ここまでの考え方を踏まえた上で、 「DDD を 採用していると言える状態 とは何か」 を実例を通して確認していきます。