Active Record

Active Record(アクティブ・レコード)とは



Active Recordは、企業アプリケーションでよく見られるデザインパターンの一つで、データベースとオブジェクト指向プログラミングの間を橋渡しする役割を果たします。具体的には、データベースのテーブルやビューの各行を、オブジェクトとして表現し、操作することを可能にします。

概要



Active Recordの基本的な考え方は、データベースのテーブルやビューの一行を、対応するクラスのインスタンスとして扱うというものです。これにより、データベースのレコードとオブジェクトが密接に結びつき、オブジェクトを通じてデータの読み書きを行うことができます。

このクラスは、データベースアクセスをカプセル化し、オブジェクトの生成時には、新しい行をデータベースに追加する「保存」メソッドが利用されます。また、オブジェクトの属性が変更された際には、データベースの対応する行も更新されます。さらに、ラッパークラスは、テーブルやビューのカラムに対応するアクセサメソッドを提供し、それ以外にも、MVCモデルにおけるビジネスロジックを記述することができます。

Active Recordの大きな特徴は、テーブルとクラスが一対一で対応するため、構造が非常にシンプルになる点です。特にRuby on Railsでは、データベースの定義からほぼ自動的にCRUD操作(Create, Read, Update, Delete)を備えたクラスが生成されるため、開発効率が向上します。しかし、この特性から、複雑なデータベース設計には不向きな面もあります。

具体例



Active Recordの実装として広く知られているのが、Ruby on Railsにおける実装です。例として、`parts`テーブルが`id`列(シリアルな主キー)、`name`列(varchar型)、`price`列(money型またはdouble型)を持つ場合を考えてみましょう。

新しいレコードを作成する際には、以下のようなコードが利用できます。

ruby
part = Part.new(name: 'widget', price: 12.34)
part.save


このコードは、指定された値を持つ新しい行をデータベースに作成します。これは、以下のSQLコマンドとほぼ同じ意味を持ちます。

sql
INSERT INTO parts (name, price) VALUES ('widget', 12.34);


また、データベースからレコードを検索する場合は、次のように記述できます。

ruby
part = Part.find_by(name: widgetname)


このコードは、`name`列がRubyの変数`widgetname`の値と一致する最初の行を取得し、オブジェクトを生成します。これは、以下のSQLコマンドと同義ですが、RubyのコードにはSQLが直接記述されることはありません。

sql
SELECT FROM parts WHERE name = 'widgetname' LIMIT 1;


さらに、上記のコードはより簡潔に記述することも可能です。

ruby
part = Part.find_by_name(widgetname)


補足



Active Recordは、データベースの操作をオブジェクト指向的に行える便利なパターンですが、複雑なデータベース設計や、オブジェクトとデータベースの関係が複雑になる場合には、別のパターンを検討する必要があるかもしれません。

関連項目



データマッパーパターン: Active Recordではオブジェクト自体が永続化処理を担当するのに対し、データマッパーではオブジェクトをデータマッパーに渡し、永続化処理を行います。
[オブジェクト関係マッピング]: オブジェクトとデータベースの間のデータ変換を行う技術全般を指します。
メッセージ転送: オブジェクト間でメッセージをやり取りすることで、処理を分散させるパターン。

外部リンク



* TECHSCORE - デザインパターンから見たActive Record

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。