この2週間、さまざまなブログ/Twitter/フォーラムにおいて、ASP.NET MVCを利用あるいは習得する必要があるのかというトピックについて多くの議論が交わされた。勧められないという意見から、すべてのASP.NETディベロッパが学ぶべきとい意見まである。InfoQはこのトピックについての最近の動向をまとめてみた。
Rob Conerey氏(Microsoft社員。ASP.NET MVCチームメンバでありSubSonicの作者。SubSonicはDBの各種定義からO/Rマッピング用のクラスを自動生成する.NET向けライブラリ)(Rob Conerey)は、コミュニティでASP.NET MVCを習得しないといけないのかという疑問が上がったのを見て、そうすべき理由を説明している。
氏はWeb Formsが「偉大なうそ」であると述べることから始める。
Web Formsは偽物です。注意をそらせる手品でいっぱいの皿に置かれた詐欺包み偽コードソースの空事です。Web Formsでなにをやってもウェブでなにもできません。ただ自分のためにWeb Formsを使うのです。
みなさん、これは重要なことです(少なくとも私にとっては)。みなさんは騙しを働いているのです。ウェブはステートフルではありませんし、HTTPと呼ばれるもので送信されるHTMLというものでウェブは動いているのです。このことを知って愛して心から感じないといけないのです。
氏はASP.NET MVCを使う7つの理由、氏の言葉によれば「馬鹿呼ばわりさせないための7つの理由」をあげている。
- テストの容易さ
- HTMLでのコントロール
- 拡張性
- 自分の頭で考える
- Javascriptは別に屑ではない
- 新しい概念の学習になる
- おもしろい
そしてこうまとめている。
結論:私は楽しいウェブプログラミングを取り戻そうとしています。そしてそれは大きなモチベーションになっていると思います。少なくとも私と友人たちにとってはそうです。より検討が必要というのもいいですが、もう少し単刀直入にしてはどうでしょうか。MVCを習得しない理由はまったくありません。とはいえWeb Formsにこだわる人にも理由が1つか2つはあるのだろうとは思いますが。
このエントリーにすぐ反応したJoe Brinkman氏(DotNetNuke(ASP.NETで動作するCMS)の専任ディベロッパ)は、Rob Conerey氏が「MVCを習得すべき理由」に触れてないことを批判し、それについて自身の理由をあげている。
- 異なるアーキテクチャに触れることになる
- HTMLおよびHTTPを詳しく知る必要にせまられる
- MVCではユニットテストがしやすくなる
- どれだけ自分がWeb Formsを当然と思っているかに気付く
氏はこう締めくくっている。
まとめると、MVCは必ず習得すべきです。しかしRobの書いた理由からではありません。MVCを学ぶ中で、どんなプラットフォームでもより良いウェブプログラマになるための何かをつかめるかもしれないからです。
Rob Conerey氏とJoe Brinkman氏は、理由は異なるが、二人ともASP.NETディベロッパがASP.NET MVCを習得すべきだという点では共通している。しかし別の意見を持つKarl Seguin氏は「もしASP.NETが未熟なシステムだとしたら」と問いかけをしている。
複雑なシステムをなるべくすっきり書けることは取っかかりとしては良いことです。しかし一般的なウェブ開発の現状からして、特に他のプラットフォームを見ると、ASP.NET MVCははるかに立ち後れているいます(ASP.NETより後れていると思われるのはPerlはだけです)。
あまり疑問視されてないのですが、この問題の大きな部分を占めるのはASP.NET MVCにViewとControllerしかないことです。Modelは考慮もサポートもされず、ツールもありません。repository/dal/linq/nhiberateを使って数千行のコードを書き上げて、それを他のMVC(たいていは1つのクラスを継承するだけでModelが作れます)と比べてみたら、生産性で大きく不利であることが分かるでしょう。しかし本当の影響はもっと深刻です。ControllerおよびViewと結びつく方法が整備されていないのです。モデルの属性からHTMLのラベルを生成する方法もなければ、クライアントでバリデーションをおこなう方法もありません。
…(略)…
いい知らせもあります。この「インフラ」の多くが再利用可能で、S#アーキテクチャのようなプロジェクトを作成可能だそうです。しかし、それでも私は他のよく仕上がっているフレームワークよりもそういったプロジェクトが本当に優れているのかは疑わしいと考えます。
Jeremy D. Muller氏(FubuMVC(ASP.NETのMVCフレームワーク)(FubuMVC)の作者のひとり)は長所と短所をあげている。
短所:
…このMVCフレームワークは、シャツの袖をめくりあげて、Modelを作りまくり、テストがしやすいようにし、画面同期を簡単にできるようにし、もっと役に立つHtmlヘルパを作って、インフラを整えようという気にならないと使い物になりません。…(略)…
長所:
長時間使用して慣れてからこのMVCを自分用にカスタマイズするのは、とても簡単にできます。
氏は結論でこう述べている。
ASP.Net MVCフレームワークは「注意をそらせる手品でいっぱいの皿に置かれた詐欺包み偽コードソースの空事」よりはウェブアプリを作るのに良いものであるという主張を支持したいと思いますが、その点からいえば、ASP.NET MVCはアーリーアダプタの人たちが使うためのツールと言えるでしょう。
Jeffrey Palermo氏(現在「ASP.NET MVC in action」を執筆中)は「次の場合にはASP.NET MVCを使うべきではありません」と述べている。
- ポリモーフィズムがあまりしっくりこない
- フレームワークを基盤に使いたくない
- UIがたくさんありサードパーティ製のコントロールに依存している
- オープンソースライブラリの利用に反対している
しかし氏はこう続けている。
ASP.NET MVCフレームワークは使い手に裁量のあるフレームワークです。「手を出すな」というフレームワークではありません。「ビギナー用ASP.NET」フレームワークではありません。すべてについてコントロールすることができます。「標準的」手法を用いるフレームワークにそのコントロールを任せられるほどウェブでのUIパターンは標準化されていません。Create、Read、Update、Delete、カスケード(連鎖的)永続化、遅延ロードといったデータアクセスは標準化まで達しています。一般的な操作をサポートするO/Rマッピングフレームワークは多く存在し、また主要フレームワーク(Hibernate/NHibernate)でO/Rマッピングを同じようにおこなえるので、多くのディベロッパもデータアクセスに関してはコントロールを完全に任せることに満足しています。
ASP.NET MVCを学習・利用することに賛同・反対の意見を表明している人はもちろん他にも大勢いるが、上で要約した意見にほとんどが含まれるとInfoQは考える。