Active Record
出典: フリー百科事典『ウィキペディア(Wikipedia)』
Active Record(アクティブ・レコード)とは、計算機科学において、企業アプリケーションで頻繁に認められるデザインパターンである。
[編集] 概要
アクティブレコードはデータベースからデータを読み出すためのアプローチである。データベーステーブルあるいはビューの1行が1つのクラスにラップされ、オブジェクトのインスタンスがそのデータベースの1つの行に結合される。オブジェクトの生成後は、保存メソッドで新しい行がデータベースに追加される。メモリ中にあるどんなオブジェクトもその情報をデータベースから取得する。オブジェクトが更新されると、データベースの対応する行もまた更新される。ラッパークラスはテーブルあるいはビューの各カラムに対するアクセサメソッドを実装している。
広く使われている実装のひとつは、Ruby on Rails に見られるアクティブレコードの実装である。例えば、id 列(シリアルな主キー)、name 列(varchar 型)、price 列(money 型あるいは double 型)を持った parts テーブルがあれば、次のようなコードになる。
a = Part.new a.name = "Sample part" a.price = 123.45 a.save
上記のコードは与えられた値で新しい行をデータベースに作る。これは次の SQL コマンドにほぼ等価である。
INSERT INTO parts (name, price) VALUES ('Sample part', 123.45);
逆方向に、データベースを検索するためこのクラスを用いることもできる。
widgetname = "gearbox" b = Part.find(:first, :conditions => [ "name = ?", widgetname ])
このコードは、データベースにおいて、name
列が Ruby 変数 widgetname
の値と等しい名前の最初の行から、オブジェクトを生成する。これは次の SQL コマンドとおおよそ同じだ。
SELECT * FROM parts WHERE name = 'gearbox' LIMIT 1;
別の方法として、上記のコードは次のように短くすることもできる。
b = Part.find_by_name("gearbox")
次の例では、Microsoft 社のクエリーを統合した言語 LINQ (Language Integrated Query) において、where 節で年齢により Person を絞り込み、複数のオブジェクトを取得している。
static void ObjectQuery() { var people = new List<Person>() { new Person { Age=12, Name="Bob" }, new Person { Age=18, Name="Cindy" }, new Person { Age=13, Name="Michael" } }; var teenagers = from p in people where p.Age > 12 && p.Age < 20 select p; Console.WriteLine("Result:"); foreach(var val in teenagers) { Console.WriteLine("> Name = {0}, Age = {1}", val.Name, val.Age); } Console.ReadLine(); }