0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Clean Architecture】The Database is a Detail(データベースは詳細にすぎない)― Clean Architecture の核心

Posted at

はじめに

多くのプロジェクトでは「まずデータベースを決める」ところから設計が始まります。
しかし、Robert C. Martin(Uncle Bob)は 「データベースは詳細にすぎない」 と強調します。

つまり、ビジネスルールやユースケースよりもデータベースが優先されるべきではない ということです。


1. 「データベースは詳細」とはどういう意味か?

  • データベースはアプリケーションの中心的なルールではない
  • それは 実装技術のひとつ に過ぎない
  • 本当に重要なのは ビジネスルール(Entities, Use Cases)

例:
あなたの会社の「注文処理」ルールは、MySQL を使おうが PostgreSQL を使おうが変わらないはずです。


2. レイヤーの中での位置付け

Clean Architecture の同心円モデルでは、データベースは一番外側に置かれます。

  • Entities, Use Cases … 内側のビジネスロジック
  • DB … 外側の Frameworks & Drivers に属する技術的詳細

3. 実装例(Kotlin)

// 内側: ビジネスルール
data class User(val id: String, val name: String)

// 境界: 抽象化された Repository
interface UserRepository {
    fun findById(id: String): User
}

// 内側: ユースケース
class GetUserUseCase(private val repo: UserRepository) {
    fun execute(id: String): User = repo.findById(id)
}

// 外側: DB 実装(詳細)
class SqlUserRepository : UserRepository {
    override fun findById(id: String): User {
        // SQL 実行
        return User("123", "Taro")
    }
}

ユースケース(ビジネスロジック)は SQL を知らない
→ DB を差し替えてもビジネスロジックは一切変更不要


4. なぜ「データベースは詳細」なのか?

  1. 技術は移り変わる
    • MySQL → PostgreSQL → NoSQL(MongoDB, DynamoDB)
    • クラウド移行(RDS → Firestore など)
    • 技術寿命はビジネスルールより短い
  2. ビジネスは技術に依存しない
    • 「注文」「請求」「在庫」といった概念は、DB とは無関係に存在する
  3. テスト容易性
    • DB をモック化すれば、ユースケースのテストが軽量に可能

5. よくあるアンチパターン

  • 「まずテーブル設計」から始める
  • UserDao を直接ユースケースで呼び出す
  • DB の都合(外部キーや正規化)がビジネスルールを縛ってしまう

これらはすべて、ビジネスロジックが詳細に引きずられている状態 です。


まとめ

  • データベースは アプリケーションの中心ではない
  • それは単なる 詳細(Detail) にすぎない
  • ビジネスルールやユースケースこそがアーキテクチャの中心
  • 「DB 依存のコード」は外側に押し出し、内側から切り離すべき

Clean Architecture が目指すのは「ビジネスロジックは不変・技術は入れ替え可能」という構造です。
その象徴的なフレーズが 「The Database is a Detail」 なのです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?