ドメインモデルをLINQで構築する(その1)

LINQの使いどころはいろいろあるだろうが、LINQを利用してドメインモデルのアプリケーションを作成するとどんな感じになるか気になっている。
そこで、実際にドメインモデルのアプリケーションを作成して評価してみる。題材はいつものハンバーガショップのモデルを利用していくが新しいチャレンジを織り交ぜながら頑張っていく予定だ。

なお、今回の開発環境はOrcasベータ2英語版をダウンロードして利用している

英語版データベース

今回英語環境なのでまずは英語版データベースを作成、VSのデザイナを利用してダイアグラムを記述して構築。


ドメインモデル パッケージ

わざわざ分ける必要のある規模ではないが、今回はドメインモデルを複数パッケージに分けて開発するシナリオで行います。商品(Products)、店舗(Shops)、お買い上げ(Orders)の3つのパッケージをそれぞれ別プロジェクトとして開発します。

さらに共通パッケージと単体テストのプロジェクトを追加しておきます。


最初のドメインモデルのShopクラスを作成

LINQ to SQLでデータベースのShopsテーブルからShopクラスを作成する。まずは、dbmlファイルを作成。

サーバーエクスプローラからShopsテーブルをDrag&DropするとShopクラス*1が作成されます。

作成されたクラスは単純なプレーンなクラスではなくLINQ to SQLフレームワーク用のコードが入っています。ただベースクラスに特別なクラスを要求することは無いようです。


Shopクラスのテスト

作成されたShopクラスをテストします。LINQを利用してShopを検索するシナリオです。

同じテストをC#のクエリー文で記述するとこんな感じになります。

ちなみに、この時発行されるSQL文はこんなのです。Firstメソッドの最適化がしっかりおこなわれています。


Shopクラスの拡張

Shopクラスをするには、partial classを利用して行うことができます。継承を利用したGeneration Gapパターンを利用する必要はありません。Shopクラスに対して最終的にはいくつかのドメインモデルとして機能を追加する予定ですが、現時点では特別な追加を行いませんので、ToStringメソッドをオーバーライド実装しておきます。

テストを作成して確認しておきます。


次回

次はより複雑な商品(Product)を作成します。

*1:ARと同じように単数形に変換される