出典を忘れてしまい、本当に申し訳ないのですが、ちょっと前に「分離したら結合する必要がある」という言葉に触れ、当たり前のようで実は深いなと感銘を受けていました。
さて、LINQです。
http://msdn.microsoft.com/netframework/future/linq/
http://msdn.microsoft.com/netframework/future/linq/default.aspx?pull=/library/en-us/dndotnet/html/linqprojectovw.asp#linqprojec_topic2
を見れば一発だと思いますが、クエリがプログラム言語に統合されているというわけです。
9月のPDC2005(http://www.microsoft.com/japan/msdn/pdc/default.aspx)で紹介されたそうですが、それを伝え聞いて衝撃を受けました。これで文字列結合との戦いが終わるのかと。
しかし、今日ふと思ったのですが、SQLが何故ここまで使われているか、それは水平切り口でのドメイン特化言語だったからであり、プログラム言語とは分離していたからではないか、と。
おそらく、プログラミング作業の中で、業務ロジックを書いている時とSQLを書いている時では微妙に違う帽子をかぶっています。だから階層も分けます。しかし、それは結合される必要があり、多くの場合、業務ロジックを書くのもSQLを書くのも結合するのも同じ人がやるのではないかと思います。その結合方法が、実行するまでシンタックスが正しいかどうかすら分からない「文字列」ではあまりにも悲しいので、LINQに対する期待が起こるわけですが、これは言い方を変えると、業務ロジックに対する関心と、データ操作に対する関心が分離していたところを結合してくれる人が現れたことに対する喜びなのかと思うわけです。
ところが、この方法は割と強固な結合だと思います。
http://msdn.microsoft.com/netframework/future/linq/default.aspx?pull=/library/en-us/dndotnet/html/linqprojectovw.asp#linqprojec_topic5
強固に結合するためにはこの程度のシンタックスしか定義できず、従来方式との併用になるのではないかと思われます。しかしそれは・・・と思ってしまいました。
まあ、登場はもう少し先の話なので、これから色々盛り上がるとよいなと思います。
(ちなみに、現時点ではやはりS2.DAOのSQLコメント方式が最高ではないかなと。)