はじめに

「DDD(ドメイン駆動設計)は Android には重い」

おそらく多くの Android エンジニアが、一度はそう感じたことがあるはずです。

Clean Architecture を参考に層を分け、UseCase を作り、Repository を定義し、気づけばクラスは増え続け、変更はむしろやりにくくなっている──そんな経験は珍しくありません。

一方で、Web や業務系の世界では「DDD は当たり前」のように語られています。その温度差の中で、Android エンジニアはこう悩みます。

  • DDD をやらないと設計力が低いと思われるのではないか
  • でも、全部やると明らかにオーバーエンジニアリングになる
  • 結局、どこまでやれば“正解”なのか分からない

本書は、その迷いに対する 現実的な答え を提示するために書きました。

ここで扱う DDD は、教科書的なフルセットの DDD ではありません。Aggregate Root を厳密に守る話も、巨大なエンタープライズシステムを前提とした話も、基本的にはしません。

代わりに本書が重視するのは、次の一点です。

Android アプリという制約の中で、設計が“役に立つ”状態をどう作るか。

Android アプリ開発は、UI と状態の変更が中心です。仕様変更の多くは画面に現れ、非同期処理とライフサイクルが複雑さを生みます。この文脈を無視したまま DDD の型だけを持ち込むと、設計はすぐに形骸化します。

本書では、DDD を「守るべきルール」ではなく、「判断のための視点」として扱います。

  • どこに境界を引くと変更が楽になるのか
  • どの責務はドメインに置く価値があり、どれは置かなくていいのか
  • なぜその設計を選んだのかを、言葉で説明できる状態とは何か

これらを、Android の実装文脈と結びつけながら解説していきます。

想定読者は、次のような方です。

  • MVVM や Clean Architecture は一通り実装したことがある
  • UseCase や Repository を作ってはみたが、しっくりきていない
  • 「設計が大事なのは分かるが、何が大事なのか分からない」と感じている

逆に、DDD の原理や用語を網羅的に学びたい方や、厳密な理論体系を求める方には、本書は向いていないかもしれません。

この本のゴールは、あなたが次に設計をするとき、

「Android アプリという文脈で、なぜこの構造にするのか」を自分の言葉で説明できるようになること。

そして、設計がプロダクトの足かせではなく、変更に耐えるための武器 になることです。