メインコンテンツまでスキップ

データ/レコード中心系

✅ 概要

この系統は、データベースのテーブルやレコード構造を中心にアプリケーションを設計するスタイル を扱う。

  • 「1 テーブル = 1 クラス(または 1 モデル)」という発想
  • ビジネスロジックは主にデータ構造の近く、もしくはサービス関数に置かれる
  • オブジェクト指向のドメインモデルよりも、RDB のテーブル設計が強く前面に出る

代表的なスタイルは次の 3 つ。

✅ なぜこの系統が生まれたか(歴史・背景)

  • RDB と SQL が企業システムの中心となり、「データベース設計 = システム設計」と見なされることが多かった
  • OR マッピングのコストを下げる必要があった
  • Web フレームワーク(特に Rails)の普及により「モデルクラス = テーブルラッパ」というスタイルが広まった
  • オブジェクト指向の複雑なモデリングよりも、スピードと現実解 を優先した設計が求められた

✅ 解決しようとした問題

  • テーブルとオブジェクトの変換(O/R マッピング)の手間を減らしたい
  • CRUD を素早く実装したい
  • ビジネスロジックがそれほど複雑でなく、テーブルに近い形で表現しても問題ない
  • 小〜中規模の業務アプリで「過剰なドメインモデリング」を避けたい

✅ この系統に属するスタイル

Active Record

  • テーブル 1 つにつきクラス 1 つを割り当て、
    • 行 = インスタンス
    • カラム = プロパティ
    • INSERT / UPDATE / DELETE / SELECT をメソッドとして持つ
  • Rails の ActiveRecord が典型例

Table Module

  • テーブル単位でロジックをまとめるモジュール
  • 集合としてのテーブル(複数行)に対する操作をモジュール関数として表現する

Anemic Domain Model(貧血モデル)

  • 「データクラス(プロパティのみ) + サービスクラス(振る舞い)」という構造
  • データ中心スタイルの「行き過ぎた形」として、しばしばアンチパターン扱いされる

✅ 他の系統との関係

  • A. 非構造〜初期系(Transaction Script) の自然な発展先として現れたスタイル群
  • C. レイヤード/ドメインモデル系 とはしばしば対比される(データ中心 vs ドメイン中心)
  • DDD やリッチドメインが必要な領域では限界があるが、CRUD 中心のアプリでは現実的な選択肢になる

✅ どんな時に参考になるか

  • フル DDD や Hexagonal は重たいが、 ある程度の秩序を持った CRUD アプリを作りたいとき
  • Rails のようなフレームワークを前提にした設計を整理したいとき
  • 「貧血モデル」がなぜ問題になるのか、どこまでが許容できるラインかを考えたいとき

この系統を理解することで、 「現実的な CRUD アプリ」と「本気のドメインモデリング」の境界 を見極める助けになる。