ASP.NET MVC~特徴的なルーティングと容易なテストのサポート~
竹原:ASP.NET MVCでプログラミングをしたことがある方はどれくらいいるでしょうか?
――会場内の4割の方が挙手をし、会場内でも驚きの声が上がっていました。
竹原:思いの外、利用したことがある方が多くて、感動しました。ASP.NET MVCは新しくリリースされたフレームワークで、CTPなどが何度もリリースされ、完成するまでの長い間の途中経過までも楽しむことができる技術でした。
竹原:ASP.NET MVCは、HTML、JavaScript、設計方法など多くの知識を求められるため、面倒に感じたり、コードが良く解らないと感じたりするかもしれませんが、慣れてしまえば簡単じゃないか。と感じてもらえるのではないかと思います。
今日はこんな感じで作るというデモを用意してきたので見てもらえればと思います。
――竹原さんが今回用意したデモは竹原さんのBlogにて公開されています。興味がある方はダウンロードして動作を確認してみてください。
今回サンプルで作ったのは、機能として「何にどのくらい時間をかけたか」というのを入力して保存する、時間管理アプリケーションです。ASP.NET MVCはどちらかと言うと、データを参照するだけの参照系アプリケーションに向いていますが、データの編集などもLINQで容易にできるので、更新系アプリケーションとしても利用できると思います。
ASP.NET MVCの特徴として、URLルーティングを使って登録するという機能があります。Web Formと違い、ファイル構造がURLに反映されるのではなく、ファイル構造に依存することなく、自分の好きなURLを構築できるのが魅力的です。例えば、URLはリソースを指すという観点でURLを構築すると、ユーザーにも直観的なURLとなるので、RESTfulでオシャレなアプリケーションが作れます。
後は、コントローラーとアクションに対応したビューを表示させるように構築するだけです。一見大がかりなプロジェクト構成となるので、小規模アプリケーションには向いていないという点も確かにあります(会場:笑)
ASP.NET MVCの注目点はやはりテストにあり!
竹原:ASP.NET MVCで何か気になる点などはありますか?
参加者:既定のフォルダ構成以外でフォルダポリシーなどはありますか?
竹原:個人的には特にありません。強いて言うのであれば、少しカッコよくフォルダに"s"を付けるのがオシャレです。Serviceフォルダではなく、Servicesフォルダなど、複数系にする方がデフォルトで作成されるフォルダに準拠した形になります。また、コア機能、DAL(Data Access Layer)は、ASP.NET MVCプロジェクトに入れるのではなく、別プロジェクトに格納すると管理がしやすくなります。
参加者:管理がしやすくなるだけですか?
竹原:テストも行いやすくなります。プロジェクトが肥大化した場合の管理や個別のテストなどが行いやすくなります。また、リポジトリパターンのテストも別プロジェクトから行うことで、DALを直接使ったテストではなく、リポジトリパターンを使ったテストもできます。テストを行うときにデータベースが動いていなくとも、リポジトリとして値が返ってくれば、アクションメソッドのテストやルーティングのテストなど、Web Formの単体テストではよく遭遇していたコンテキストや、環境に依存したテスト環境の構築といったものから解放されます。
参加者:本物のDALを使わない場合は何かモックを使うんですか? モックを作る上でのお勧めとかはありますか?
竹原:私自身は、Rhino Mocksが好きなんですが、ASP.NET MVCでメジャーなのはMoqです。
小野:モックが何か分からない方いませんか?
――会場から挙手がありました。
小野:モックは、テスト用に直接データを触らせないために、テストの時に利用する仕組みだと考えてもらえばいいと思います。
竹原:対象が異なりますが、スタブと言うと分かりやすいかも知れません。モックはリポジトリパターンと相性がいいです。リポジトリパターンでは、インターフェースが重要です。リポジトリに書いたロジックを触らずに、データの対象をDBからモックへと変更するだけでテストが容易にできます。
――リポジトリパターンについては、後日公開予定の「ASP.NET MVCの開発応用編1~リポジトリパターンをマスターする~」を参照ください。
竹原:気がつけばASP.NET MVCの話ではなくテストの話になっていますね…(会場:笑)
ナオキ:ASP.NET MVCの説明が長くなってしまっていますが、それだけASP.NET MVCに対する注目度が高いと感じられます。ASP.NET MVCの分かりやすい特徴として重要な点はURLルーティングと、Web Formでは実現できなかったテストの優位性です。
それでは、ディスカッションに進みたいと思います。