何となく Blog by Jitta
Microsoft .NET 考

目次

Blog 利用状況
  • 投稿数 - 761
  • 記事 - 18
  • コメント - 37042
  • トラックバック - 222
ニュース
  • IE7以前では、表示がおかしい。div の解釈に問題があるようだ。
    IE8の場合は、「互換」表示を OFF にしてください。
  • 検索エンジンで来られた方へ:
    お望みの情報は見つかりましたか? よろしければ、コメント欄にどのような情報を探していたのか、ご記入ください。
It's ME!
  • はなおか じった
  • 世界遺産の近くに住んでます。
  • Microsoft MVP for Visual Developer ASP/ASP.NET 10, 2004 - 9, 2011
広告

記事カテゴリ

書庫

日記カテゴリ

ギャラリ

その他

わんくま同盟

同郷

 

また、書いてみようと思う。

LINQ の本を読んでいます。その中で、C# や VB.NET に追加された、ラムダ式、型推論、拡張メソッドといった機能は、LINQ の為に追加された機能で、むやみやたらと使うものではない...と、書かれています。

確かに、C# の「型推論」“だけ”が取り上げられたときは、VB の様な「何でも型」が C# に取り入れられるのか!?と、物議を醸し出したように思います。

しかし、実際には、コンパイラが右辺から左辺の型を推論するもので、“コーディングを簡略化する”という説明が、そのときはされていたように思います。

で、実際には、LINQ では、コーディング時にいちいち型を定義しづらい場合があるので、LINQ を実装するために必要な機能だった、ということです。


で、LINQ。(ここから先、オレ理解)これは、データの塊を扱うときに、“どこにあるデータの塊か”ということを、開発者が意識しなくてもいいようにする仕組みです。LINQ to ほにゃららが、どこにあるのかによって最適な形に、コードを展開します。

データベースというと、Oracle, SQL Server, PostgreSQL, MySQL あたりをあげておけばいい?DB2 とか Firebird もあげておく?そんなもんかな?いろいろありまして、SQL99 で標準が決められてはいますが、方言があります。

.NET Framework では、System.Data 名前空間に、いくつかのデータベース用のクラスが用意され、いくつかのインターフェイスが定義されています。この、“いくつかの”ってのがくせ者で、使いにくかったのだけど。

で、接続先ごとに、それら用のクラスを使い、ビジネス ロジックではインターフェイスを使うようにすると、複数のデータベース システムに対応したシステムが作れます。

この方法では、アプリケーション開発者が、SQL のそれぞれの方言を確認し、それぞれにあわせた SQL を組み立て、コーディングします。「ストアード プロシージャでやれ」ってのは、置いておく。

対して LINQ では、アダプター提供者が SQL の方言を吸収するため、開発者はどのターゲットに対しても同じコードを書いておけばよい、ということになります。

確かに、便利です。簡単です。

で、それでいいの?


いえ、問いを変えましょう。「本当に、簡単になったの?」



私は、「いいえ」と思うのです。なぜか。それは、私が「簡単になって欲しい」と思っている対象と、「簡単になる」と言われている対象が違うからです。

LINQ によって、“コーディングは”簡単になりました。しかし、顧客の要望をコードにするところは、簡単にはなっていません。そして、コードを書くことよりも、顧客の要望をコードで表すことのほうが、遙かに難しいと思うのです。

あるいは、この言葉はあまり好きではありませんが、コードを書くことだけに専念する人をコーダーと呼ぶ場合があります。コーダーの仕事は楽になりますが、仕様書を作る人の仕事が楽になるわけではありません。余談:ん~?だからコーダーは安物扱いされるのか?

掲示板などに書き込まれている内容から私が思うのは、仕様書だけを書いている人は、実際に使うものについては無頓着です。何を使おうと、「データベースからデータを参照し、ユーザが編集し、データベースに書き戻す」とだけ書いておけば、自分の仕事は済んだと言わんばかりです一例。それによって、実装者がどれほど苦労しているかも知らずに。。。

で、実装者の方です。これで、本当に簡単になるのでしょうか。

確かに、コードを書くことは軽減されます。しかし、ここで勘違いして欲しくないのは、コードを書くという手作業が軽減されることと、コード化するという頭脳作業が軽減されることは、必ずしも一緒ではない、ということです。

LINQ によって、コード化する手作業は軽減するでしょうが、どのようなデータの取得をしなければならないかという頭脳作業については、軽減されていません。

それどころか、デバッグの時に、どのコードによってどのようなデータが集まってきているのか、わかりにくくなっているかもしれません(実際に動かしたことはないので未確認)。


「簡単になる」のは、いいことなのでしょうか。それはいいことなのでしょう。でも、本当に、簡単になっているのでしょうか。“何を”簡単にしたいのか。そこのところが抜け落ちているような気がします。

投稿日時 : 2008年8月18日 22:28
コメント
  • # re: 簡単になるのはいいことなのか?
    NyaRuRu
    Posted @ 2008/08/18 22:38
    >これは、データの塊を扱うときに、“どこにあるデータの塊か”ということを、開発者が意識しなくてもいいようにする仕組みです。LINQ to ほにゃららが、どこにあるのかによって最適な形に、コードを展開します。

    という主張を行う例の赤間本は,やはりデータベース屋さんの視点が強すぎる気がするのですな.
  • # re: 簡単になるのはいいことなのか?
    R・田中一郎
    Posted @ 2008/08/18 23:14
    >という主張を行う例の赤間本は,やはりデータベース屋さんの視点が強すぎる気がするのですな.

    本の趣旨としては、そうなのかもしれませんが、仮にデータの塊をデータベースと考えた場合においても、以下の引用部の文章はマッチするように思います。

    >これは、データの塊を扱うときに、“どこにあるデータの塊か”ということを、開発者が意識しなくてもいいようにする仕組みです。

    メモリ上にあるコレクションオブジェクトであっても、DBMSであっても、ですね。

    僕は、LINQ の、こういう考え方が好きです。
  • # re: 簡単になるのはいいことなのか?
    NyaRuRu
    Posted @ 2008/08/18 23:32
    > 本の趣旨としては、そうなのかもしれませんが、仮にデータの塊をデータベースと考えた場合においても、以下の引用部の文章はマッチするように思います。

    あー済みません.こう書けば伝わるでしょうか.
    「という主張を LINQ の中心に据える例の赤間本は,やはりデータベース屋さんの視点が強すぎる気がするのですな.」

    別に悪い本と言っているわけではなくて,そもそもデータベース屋さんの読者を想定して書かれているのだと思います.データベース屋さんにとって「LINQ で何ができるようになって,何ができるようにならないの?」がまとまっていて,その意味では非常に分かりやすい本だと思います.

    ただ,私のような LINQ to Object 好きーにとっては,「“何を”簡単にしたいのか」がだいぶ一箇所に偏っているなという印象を受けました.
  • # re: 簡単になるのはいいことなのか?
    NyaRuRu
    Posted @ 2008/08/18 23:52
    もう一点.

    LINQ to Object のようなリスト操作に関しては,関数型言語の先行事例から,「型推論/ラムダ式を組み合わせてあのような実装を作れば強力なリスト操作が手に入る」ことが事実として分かっていました.
    つまり,LINQ to Object のアプローチでリスト操作が簡単になることは,やる前から分かっていたことで,あとはもうやるかやらないかだけです.

    一方,LINQ to SQL や LINQ to Entities はかなり野心的な取り組みです.現在のアプリケーション開発に要求される SQL は多種多様です.LINQ to SQL や LINQ to Entities のライブラリ設計や実装方法など,何が正解だったかの結論がでるのには少なくとも数年後を要するでしょう.LINQ to Object との違いは,過去の成功例をどこまで下敷きにしているかにあります.つまり,既に成功しているものを移植するか,新しく挑戦するかの違いです.

    という感じで目下奮闘中の LINQ to SQL に注目し,「本当に、簡単になったの?」という問いが今なされることは,それほど不思議だとは思いません.
    とはいえ結論が安定するのは数年後のことでしょう.
  • # re: 簡単になるのはいいことなのか?
    シャノン
    Posted @ 2008/08/19 1:14
    > 関数型言語の先行事例から,「型推論/ラムダ式を組み合わせてあのような実装を作れば強力なリスト操作が手に入る」ことが事実として分かっていました.

    ぶっちゃけ、それを分かっている C#er がどれほどいるのでしょうかね?
  • # re: 簡単になるのはいいことなのか?
    Jitta
    Posted @ 2008/08/19 6:59
    INSERT や UPDATE が整備されれば、やはりデータベースがメインになるように思います。
    鶏唐揚さんが、値型リストの操作で詰まっていましたが、insert / update が整うと、値型への参照も扱う事ができるのかなぁ?
  • # re: インターネットで検索って、実は不便?
    何となく Blog by Jitta
    Posted @ 2009/03/27 9:54
    re: インターネットで検索って、実は不便?
タイトル
名前
Url
コメント