ASP.NET MVC で気をつけたいこと
次回ASP.NET MVCでプロジェクトを開発する際に、開発メンバーで「お約束」としたいことをまとめました。
内容は業務アプリ用になっています。
中には超当たり前なことも書いてありますが…。
ASP.NET MVC ひとり反省会
こちらの記事もMVCの反省についてまとめられています。
大変参考になります。
2.Not Found 404 を実装する。
目的
- 不要な例外をださないため。
どうする?
- データが見つからない場合は、ぬるぽではなく、Not Foundを返すようにする。
- Handling Not Found with ASP.NET MVC 3を参考にし、変なURLでアクセスされた時に、Not Foundを返すようにする。
- ControllerのHandleUnknownActionメソッドをoverrideし、Actionが見つからない場合をキャッチする。
- (デフォルトでNot Foundが返されるようになっています。)
- CustomControllerFactoryを実装している場合は、引数のcontrollerTypeがnullの場合に、 HttpException(404.. の例外を出す。
- (デフォルトのDefaultControllerFactoryではそのように実装されています。)
- 全てのルーティングを定義している場合は、catch-allルートでNot Foundを出す。
- ControllerのHandleUnknownActionメソッドをoverrideし、Actionが見つからない場合をキャッチする。
3. POSTとGETを正しく使い分ける。
目的
- ユーザに優しくするため
- WEBアプリとして正しい動きにするため。
破ったらどうなる?
- データ検索して表示する時に、最新情報を取得したいと思い「F5」を押したとします。
- →するとこんなアラートが表示されます。「このページを再表示するには、以前送信した情報を再送信する必要があります。」
- ( ゚д゚)ポカーン
どうする?
- データを表示するときは、GET。データを変更するときは、POST。
- アクションセレクターやルーティングについて勉強する。
4.アクションメソッド名は意味のある名前付けをする。
目的
- 可読性UP。
- ASP.NET MVCを泣かせない。
破ったらどうなる?
- 例えば、Listページの、追加ボタン先のアクションメソッドを、[HttpPost] List() にしたとします。
- → Listメソッドの中に、追加処理が書いてある事になり、とても気持ち悪い感じがします。
どうする?
- アクションメソッド名は、仕事内容に合う名前をつける。
- アクションセレクターやルーティングについて勉強する。
5.[HttpGet] [HttpPost] [ChildActionOnly] [AjaxOnly] これらの属性は必ずつける。
目的
- 可読性UP
どういうこと?
これらの属性は、付けなくても正しく動く場合があるが、
Controllerクラスを覗いた時に、[HttpGet]や[HttpPost]がついていると、
何をしているのかひと目でわかり、快適です。
どうする?
正しく動く場合でも、[HttpGet] [HttpPost] [ChildActionOnly] [AjaxOnly]
この4つの属性については記述するようにする。
(AjaxOnlyは、独自作成クラスです。MVCにはありません。) MVC3Futuresにあります。
6.ルーティングのテストは必ずかく。
目的
- ルーティングミスを減らすため。
どういうこと?
- ルーティングは、定義されたルートデータの中を、上から順に検索して決定されます。
- なので、先頭に似たようなルーティングが追加されると、既存のルーティングが正しく動かなくなる可能性があります。
どうする?
- ルーティングのテストを書きます。→ 書き方参考 ルートをテストする
8.Viewでif elseや、switchを使わない。
目的
- コードを綺麗にするため。
どうする?
- Viewでif elseや、switchを使わないよう、Modelを作成する。
- どうしてもという場合は、Modelに、処理を格納する。
- if は、@if(Model.CanView) など、単純な条件式のみ使用する。
9.Viewで使うModelには、ビジネスロジックを記述しない。
目的
- コードを綺麗にするため。汚くなるのを防ぐため。
どういうこと?
Viewで使うModelは、画面を作成するためのモデルです。
ビジネスロジックをそのModelに記述すると、複数の画面で共通の処理を行う場合、
コードが容易にコピペされるかもしれません。
10.積極的にJavaScriptを使用してもよいかもしれない。
目的
- レスポンス速度UP
- JavaScriptの技術力UP
どういうこと?
業務アプリなので、必要最低限なJavaScriptしか使用していませんでした。が、
Ajax通信を積極的に利用し、テストとjQueryの技術力をUPさせた方が、良いような気がしてきました。
簡単なAjax通信は、標準化するべきかな?と思います。
MVCだと綺麗にかけますし…。
どうすうる?
- 簡単なAjax通信を積極的に利用する。
以上です。
開発チームメンバーなんているかわからないけど…(´;ω;`)