ASP.NET MVCを利用した業務アプリについて

今年はASP.NET MVCを利用したアプリケーション開発に携わったのでその感想をまとめます。

軽量・小回りが利く

ASP.NET WebFormに比べて出力するHTMLを全てコントロール可能でシンプルなHTMLを出力することができます。このためCSSJavaScriptjQuery)の利用も直観的で相性も良いです。
WebFormに比べ欠点としてはVSデザイナによる画面作成ができない点がありますが、実行すれば画面確認できるので、微調整はHTML修正保存・ブラウザ更新のサイクルで行えばそれほど苦になりません。またテーブル形式にタグを配置したり用のレイアウトを支援するヘルパーを作成するなどの工夫をすることができます。今回、タブレットとPC両方がターゲットでリキッドレイアウトが基本なのでこの仕組みは役に立ちました。

HTMLメッセージパターン

今回ほぼ全てのリクエストをajaxで行います。リクエストの結果としてHTMLを受け取りそれを画面に表示します。このような処理方式をHTMLメッセージパターンと呼ぶようで、jsonを利用するよりも比較的簡単でASP.NET MVCの部分View機能とも上手くマッチします。通常は更新系のPOSTなどで良く使われるの方法ですが、HTMLの代わりにJavaScriptを返してスクリプトを実行する方法と組み合わせることで、ほぼ全ての処理で適用可能になります。これによってブラウザ側にさまざまな値を保持して処理に利用できることになり、サーバとクライアント間の転送量を最小限にできるなど高速化に貢献します。ステートフルJavaScriptの考え方に近い点はありますが、画面遷移はlocation.hrefを書き換えてGETで処理します。HTMLの組み立てはサーバサイドで行いそれをJavaScriptで表示する方法は、業務アプリにはバランスが取れた方法だと考えています。

jQuery

jQueryのおかけでJavaScriptの記述が大幅に削減されました。またJQuery UIを利用することで便利な画面部品が簡単に利用できます。今回Dialog、DatePicker、Tabなどを利用しましたが、ASP.NET MVCでの利用でまったく困ることはありませんでした。一点、ASP.NET MVCの問題ではないのですが、Dialogで別画面を表示する際にiframeを利用して表示するとドラッグやリサイズを行うと描画が遅くなる問題があったのですが、jQueryに関する情報がインターネット上には多くあってすぐに解決策を入手することができました。

入力チェック

ASP.NET MVCのモデルに属性を付けて入力チェックする仕組みは強力なのですが、数字型に数字以外を入力された場合のメッセージ表示などを行いたい場合や、画面によってメッセージを変えたい場合など細かな制御での対応で手間があり、最終的にはモデルベースではなくコントローラでの明示的なチェック方式にしました。クライアントサイドについてもjQuery Validateを使って、入力検証ルールを生成するHTMLヘルパーを用意して実装しました。エラー時にはDialogで表示し閉じたらエラー個所にフォーカスを移動するという、業務アプリにありがちな処理をしていますがjQuery Validateで簡単に実装できたのは助かりました。

エリア

それなりの規模のアプリケーションであれば複数チームで開発が行われます。今回も複数チームの開発でエリアを利用して複数プロジェクトに分割して開発しています。ルートのWebプロジェクトをランチャーにようにして各チームのWebプロジェクトをエリア下に仮想ディレクトリとして配置します。あとはプロジェクトビルド時にバイナリをルートのWebプロジェクトにコピーすれば動作する仕組みで、開発のスケールアウトもできました。

まとめ

タブレットとPC両方をターゲットに入れたWebの業務アプリの開発は今後多くなると思いますが、ASP.NET MVCでのHTMLメッセージパターンは業務アプリには非常に向いている方法でおすすめです。jQueryなどのクライアントサイドの技術との相性が良くリッチHTMLのアプリを作成する場合には第1候補の技術だと思います。