はじめに
以前、音速を意味するSubSonicという.NETのActiveRecord実装を紹介しましたが、今回は光速を意味するLightSpeedというフレームワークを紹介します。
LightSpeedは「ドメインモデリング用のデザイナー」と「O/Rマッピングフレームワーク」から構成されます。他のO/Rマッパーとは異なり永続化の仕組みをほとんど意識せずに開発できるのが特徴で、ドメイン駆動設計とモデル駆動設計と相性が良いようにデザインされています。
前編にあたる本編では、LightSpeedの導入とモデルデザイナーについて紹介します。中編では基本的な操作(追加、更新、参照、削除)について、後編ではクエリの書き方などについて紹介します。
環境について
LightSpeedは、Mindscape社で開発されているプロダクトです。.NET Framework2.0以上の環境で動作し、C#、Visual Basicの両方で開発できます。モデリング用のデザイナーを使用する場合は、Visual Studio 2008 Standard Edition以上が必要です。
本稿では、無償版(商用利用可)のLightSpeed Express Edition、.NET Framework3.5(VSTS2008)、C#を使用して機能を紹介していきます。
.NETにおけるドメイン駆動設計
ドメイン駆動設計(Domain-Driven Design)が人気を集めていることもあり、最近、ドメインモデルに関する話題を耳にする機会が増えてきているのではないでしょうか。その反面、.NETでどのようにドメインモデルを構築すれば良いのか分からない方も多いのではないでしょうか。というのも、もし新たにドメイン駆動設計を始めようすると、いくつかの問題に突きあたります。まずドメインモデルでは、ビジネスロジックを「振る舞いとデータをカプセル化したモデル」として構築するため、開発メンバーに対して、オブジェクト指向設計やモデリング技術といった高いスキルを要求することになります。さらに、このドメインモデルを永続化して、必要な条件で取り出せるインフラも構築しなければなりません。.NETでは、O/Rマッパーとして有名なNHibernateや、共通の振る舞いを埋め込むAOP(アスペクト指向)を利用することが多いようですが、納得いく環境を構築するまでに時間がかかる上、開発メンバーの学習コストも高くなってしまいます。また、ドメイン駆動設計の中心的な要素である「モデル駆動設計(モデルとコードの連携)」「実践的モデラー(プログラマー兼モデラー)」をどのように導入していくのかも難しいところです。
ドメイン駆動設計と相性の良いLightSpeed
この点において、LightSpeedには、ドメイン駆動設計を容易に導入するための仕組みが揃っています。まず、開発者はモデリング用のデザイナーを利用できます。このデザイナーを使うことで、グラフィカルな画面を見ながら正しいドメインモデルを検討することができます。
デザインしたモデルからコードは自動生成されます。もちろん、このコードと連携するインフラストラクチャ(O/Rマッパー等)も充実しています。さらに、モデルからテーブルスキーマを更新したり、逆にテーブルスキーマからモデルを更新することもできます。
LightSpeedの機能
これ以外にもLightSpeedには、次のような機能が備わっています。
・様々なRDBMS対応
・チューニングされたSQL(パフォーマンス最適化、脆弱性対応)
・強制ロード/遅延ロードの使い分け
・登録/更新/論理削除日時の管理、楽観的同時実行制御の管理
・バリデーション機能。エラーのエンティティ格納
・モデルに対するLINQ問い合わせ
・.NET標準のトランザクションサポート(System.Transactions)
・テストしやすい設計
・コマンドラインツールによるモデルの生成