開発の視点でみるLINQ
前回はLINQについてドメイン層の各パターンを補完することのできるテクノロジーとして紹介した。今回は開発の視点に絞って、実際にVisual Studio 2008を使用した開発手順や手法についてサンプルを紹介しながら解説していく。
まずは、データアクセスの根底にある問題点から、なぜLINQのテクノロジーが必要とされるのかをみていこう。
データベースアクセスのプログラム記述の問題点
LINQのもっとも重要なポイントは、前回記述したようにさまざまなデータソースにおける共通のアクセス手段を提供することである。しかし、より現場の実装作業に近い観点でも数多くの恩恵を受けることができる。
リスト1はADO.NETの接続型を使用したデータベースアクセスを行うプログラムの記述である。ここでの問題点は「(1)SQLが文字列であること」「(2)パラメーターの型があいまいであること」「(3)結果セットの型があいまいであること」である。そして、これらの問題点から「(4)コンパイル時にエラーが検出できない」もあげることができる。
また、SQLは前述どおり文字列で記述するため、Visual Studioが提供するIntelliSenseなどのサポートも受けることができない。筆者のように、IntelliSenseに慣れきってしまうと、いざ使用できない環境でのコーディングは非常に苦痛が伴う。さらに、テーブル名、フィールド名など、SQL自体の記述にミスが起こる可能性も高まる。このように、開発生産性の意味でも課題があるのである。
では、このようなプログラムをLINQで記述すると、どうなるかを確認してみよう(リスト2)。
前述のIntelliSenseの使用が可能になる点や、パラメーターや戻り値の型付けが明確である点、そしてコンパイル時にエラーが検出される点などの問題点が解決されていることが、理解いただけるのではないだろうか。
(画像をクリックすると別ウィンドウに拡大図を表示します)
リスト2:LINQのプログラム記述
Northwind db = new Northwind(…);
var contacts =
from c in db.Customers
where c.City == "London"
select new { c.Name, c.Phone };
foreach(var c in contacts)
Console.WriteLine(c.Name);
Data=Object
前回の解説の中で、LINQはコレクションオブジェクトに対するクエリーである点を述べた。これは、データベースアクセスを考える場合に特徴的である。
データベースアクセスは、LINQ to SQLで提供されるが、実はLINQのプログラムコード自身がデータベースとのやり取りを行っているわけではない。LINQが提供するものは、あくまで「オブジェクトを操作する機能である」からだ。
LINQが多くのデータソースを扱うことができるのも、このオブジェクトを操作する機能が実装されているからである。したがって、直接のデータベースアクセスのようなデータソースに特化した機能は、LINQ to SQLの場合であればLINQ to SQLプロバイダが専用に用意される。
すなわちLINQ to SQLのプログラムの中で、あたかもデータベースのデータのように扱っているものはLINQが用意したオブジェクトであり、そのオブジェクトを作成するためには、データベースとのマッピング情報を事前定義する必要がある。
この事前定義は扱う対象のデータベースからあらかじめ作成しておく必要がある。しかし、Visual Studioを使用すれば、ビジュアルデザイナーなどを使用した直観的な定義が可能である。ではVisual Studio 2008を用いて、実際に試していこう。 次のページ