ひがやすを技術ブログ

電通国際情報サービスのプログラマ

アクティブレコードパターンの本当の意味

PofEAAをみると、アクティブレコードは、「テーブルの行をオブジェクトでラップしたもの」で、データマッパーは、「データベースとオブジェクトを独立して設計しそれらを結びつけるもの」と書いているので、アクティブレコードパターンは勘違いされやすいかも。


アクティブレコードの定義を原文から持ってくると次のようになります。


An object that wraps a row in a database table or view,
encapsulates the database access, and adds domain logic on that data.
重要なことは、アクティブレコードのオブジェクトは、データベースアクセスをカプセル化していることです。オブジェクトがデータアクセスの機能を提供していると言い換えてもいいでしょう。
もっと具体的にいえば、エンティティクラスは、フレームワークで提供されているデータアクセス機能を持ったクラスを継承して作るということです。


Hibernteを使う場合だって、オブジェクトとテーブルの行を一対一に対応させて使うことは可能です。「テーブルの行をオブジェクトでラップしたもの」だからアクティブレコードパターンだと思うのは、危険です。
「エンティティクラスは、フレームワークで提供されているデータアクセス機能を持ったクラスを継承して作る」のがアクティブレコードパターンだと覚えているほうが、間違うことはありません。