Kairyuとは?

Kairyu は、.NET用 Object Relation Mapping Framework (以下、ORM)です。
単調かつ大量に発生するObject Relation変換コーディングを減らすために作られました。

実装イメージは?

VB.NET
Imports Kairyu.Extensions.IO
Imports Kairyu.Load
Imports Kairyu.Save

Module Module1
    Sub Main()
        '主キー値が「1」のクラスを取得
        Dim m = DB.Connect(Function(r) r.From(Of ModelClass).WhereKeyEquals(1).ToItem)
        '編集作業をする前に、現在の内容を記憶
        Dim s As New Strage(m)
        '編集作業
        m.Name = "名前を変更"
        '変更内容を保存
        DB.Transact(Sub(r) r.Save(m, s))
    End Sub 
End Module

'モデルクラス。ORMに関する記述不要。
Public Class ModelClass
    Public Property ModelClassID As Integer
    Public Property Name As String
End Class
C#
using Kairyu.Extensions.IO;
using Kairyu.Load;
using Kairyu.Save;

static class Module1
{
    public static void Main()
    {
        //主キー値が「1」のクラスを取得
        dynamic m = DB.Connect(r => r.From<ModelClass>.WhereKeyEquals(1).ToItem);
        //編集作業をする前に、現在の内容を記憶
        Strage s = new Strage(m);
        //編集作業
        m.Name = "名前を変更";
        //変更内容を保存
        DB.Transact(r => r.Save(m, s));
    }
}

//モデルクラス。ORMに関する記述不要。
public class ModelClass
{
    public int ModelClassID { get; set; }
    public string Name { get; set; }
}
  • 著者はC#を使っていませんので、「developerFusion[www.developerfusion.com]」を使用して変換したものです。ご了承ください。
  • ModelFactory、Strageは、フレームワークのクラスです。
  • 詳しくは「Documentation」を参照。

特徴は?

データベースコネクションの生成は管理外

DBへの接続はORMの本題ではないので、ORM本体と統合せず、従来の IDbConnection クラスをそのまま使用できるようにします。
このため、コネクションの開閉、トランザクションの開始、終了を明示する手間はありますが、同一トランザクション内での任意ストアドの実行など、従来処理とORMを共存させることが容易です。
  • 同処理はORMと親和性が高いため、拡張ツール(Kairyu.Extensions.Connection)にて対応。
  • 見出し「実装イメージは?」のサンプルコードは同拡張ツールを使用しています。

手書きSQLも歓迎する

ORMフレームワークらしからぬ題目ですが、Kairyu(というよりORM自体)には向いている作業と向いていない作業があります。
例えば単票のような1モデルを掘り下げて編集する場合、手書きSQLよりもKairyuに分があります。
しかし、検索や、分析レポート、バッチ処理などは手書きSQLに分があります。
このため、手書きSQLを完全に排除するつもりは毛頭なく、むしろ用途が合えば積極的に手書きSQLを使用してほしいと考えています。
  • 手書きSQL…T-SQL、PL/SQLなども含む。

設定より規約(convention over configuration)

ORMは、「このクラスはどのテーブルにマッピングするのか」等のマッピング情報が大量に必要で、いちいち手書きで指定するのは大変骨が折れます。
この作業を省略するため、「コードから自動的にマッピング設定を作成」するようにし、省略できるものとします。
  • 規約の簡単な例として「テーブル名はクラス名を複数形した名前であること」というものがあります。この規則に従う限り、設定ファイルを作る必要はありません。
  • しかし、既存のテーブルを参照する場合は、上述の規約に沿わないこともありますので、属性、または規約のオーバーライドで対応できるようにします。

SQLServer、SQLServerCeに対応

発行されるSQL文は極力ANSI標準になるようにしているため、メジャーなDBMSであれば動作するはずです。
が、開発環境を構築するのが手間なので、メインのテスト環境をSQLServer、SQLServerCeの2つに絞りたいと思います。ご容赦ください。
上記以外のDBMSが対応しているかどうかについては、動作検証用サンプルプログラムを用意する予定ですので、そちらの実行結果をもとに各自判断していただければと思います。
  • Microsoft AccessはSELECT文のリレーション文が特殊であるため現時点でサポート外が確定しています。

使い方は?

Documentation」を参照してください。
また、配布しているソースコードに「tests」というフォルダがあります。
ここにSqlServerCe3.5を使用したユニットテストコードがはいっております。こちらの内容は独習の参考になると思いますので、ぜひご活用ください。
  • VisualStudio2010、SqlServerCe3.5がインストールされていればサンプルは動きます。DBMSの設定などは要りません。

Last edited Mar 12, 2013 at 12:16 PM by mk3008, version 22