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.where(:name => widgetname).first

このコードは、name 列が Ruby 変数 widgetname の値一致する最初の行を取得して、オブジェクトを生成する。取得については、次の SQL コマンドと同義であるが、前述のrubyコードにそれは現れない。

SELECT * FROM parts WHERE name = 'gearbox' LIMIT 1;

別の方法として、上記のコードは次のように短くすることもできる。

b = Part.find_by_name("gearbox")

次は、 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();
}
個人用ツール
名前空間
変種
操作
案内
ヘルプ
ツールボックス
他の言語