コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

ActiveRecordの強みと弱みを見つめ直す

RailsActiveRecordってなんでいいんだっけ?ということを見つめ直す。

そもそもActiveRecordパターンとは

Martin FowlerのPatterns of Enterprise Application Architecture(通称 PofEAA)にて紹介されたデザインパターン

An object that wraps a row in a database table or view, encapsulates the database access, and adds domain logic on that data. -P of EAA: Active Record

機械+意訳すると

データベーステーブルまたはビューの行をラップし、データベースアクセスをカプセル化し、そのデータにドメインロジックを追加するオブジェクト。

ということで、DBのテーブル定義とクラスを1対1で紐付けて、SQLでできる動作をそのクラスに実装する感じになる。

強みと弱み

強み

  • RDBのテーブルとモデルが1対1になるので関係性がわかりやすく、実際のデータ格納場所とモデルが直感的につなげやすい
  • ビジネスロジック部分も一気通貫で実装できるため、実装に必要なものが最低限になる

弱み

  • 密結合のため、テーブルの構造変化に順応しなければならないし、RDBの制約と密に連動してしまうので、切り離しが困難
  • モデルが複数のRDBのテーブルを参照してデータを作り出すケースの場合表現が困難
  • 密結合のため、モデルの内容が多様化し、モデル=テーブルが維持できなくなってくると破綻する

関連リンク