読者です 読者をやめる 読者になる 読者になる

miso_soup3 Blog

主に ASP.NET 関連について書いています。

ASP.NET MVC で気をつけたいこと

次回ASP.NET MVCでプロジェクトを開発する際に、開発メンバーで「お約束」としたいことをまとめました。
内容は業務アプリ用になっています。
中には超当たり前なことも書いてありますが…。

ASP.NET MVC ひとり反省会
こちらの記事もMVCの反省についてまとめられています。
大変参考になります。

1.CSSテンプレートを作成する。

目的
  • デザイン統一するため
  • CSSの無駄な記述を省くため。
どうする?

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を出す。

3. POSTとGETを正しく使い分ける。

目的
  • ユーザに優しくするため
  • WEBアプリとして正しい動きにするため。
破ったらどうなる?
  • データ検索して表示する時に、最新情報を取得したいと思い「F5」を押したとします。
  • →するとこんなアラートが表示されます。「このページを再表示するには、以前送信した情報を再送信する必要があります。」
  • ( ゚д゚)ポカーン
どうする?
  • データを表示するときは、GET。データを変更するときは、POST。
  • アクションセレクターやルーティングについて勉強する。

4.アクションメソッド名は意味のある名前付けをする。

目的
破ったらどうなる?
  • 例えば、Listページの、追加ボタン先のアクションメソッドを、[HttpPost] List() にしたとします。
  • → Listメソッドの中に、追加処理が書いてある事になり、とても気持ち悪い感じがします。
どうする?
  • アクションメソッド名は、仕事内容に合う名前をつける。
  • アクションセレクターやルーティングについて勉強する。

5.[HttpGet] [HttpPost] [ChildActionOnly] [AjaxOnly] これらの属性は必ずつける。

目的
  • 可読性UP
どういうこと?

これらの属性は、付けなくても正しく動く場合があるが、
Controllerクラスを覗いた時に、[HttpGet]や[HttpPost]がついていると、
何をしているのかひと目でわかり、快適です。

どうする?

正しく動く場合でも、[HttpGet] [HttpPost] [ChildActionOnly] [AjaxOnly]
この4つの属性については記述するようにする。
(AjaxOnlyは、独自作成クラスです。MVCにはありません。) MVC3Futuresにあります。

6.ルーティングのテストは必ずかく。

目的
  • ルーティングミスを減らすため。
どういうこと?
  • ルーティングは、定義されたルートデータの中を、上から順に検索して決定されます。
  • なので、先頭に似たようなルーティングが追加されると、既存のルーティングが正しく動かなくなる可能性があります。

どうする?

7.部分ビューなどの共有Viewは、名前でわかるようにする。

目的
  • 可読性UP
どうする?

MVCのテンプレートのように、共有されているビューや部分ビューは、頭に"_"をつけます。

8.Viewでif elseや、switchを使わない。

目的
  • コードを綺麗にするため。
どうする?
  • Viewでif elseや、switchを使わないよう、Modelを作成する。
  • どうしてもという場合は、Modelに、処理を格納する。
  • if は、@if(Model.CanView) など、単純な条件式のみ使用する。

9.Viewで使うModelには、ビジネスロジックを記述しない。

目的
  • コードを綺麗にするため。汚くなるのを防ぐため。
どういうこと?

Viewで使うModelは、画面を作成するためのモデルです。
ビジネスロジックをそのModelに記述すると、複数の画面で共通の処理を行う場合、
コードが容易にコピペされるかもしれません。  

どうする?
  • 記述しようとしている処理が、ビジネスロジックなのか、表示するためのロジックか、確認する。
  • ビジネスロジックは、Viewで使うModelには記述しない。
  • プレゼンテーションとドメインの分離について勉強する。

10.積極的にJavaScriptを使用してもよいかもしれない。

目的
  • レスポンス速度UP
  • JavaScriptの技術力UP
どういうこと?

業務アプリなので、必要最低限なJavaScriptしか使用していませんでした。が、
Ajax通信を積極的に利用し、テストとjQueryの技術力をUPさせた方が、良いような気がしてきました。
簡単なAjax通信は、標準化するべきかな?と思います。
MVCだと綺麗にかけますし…。

どうすうる?
  • 簡単なAjax通信を積極的に利用する。

以上です。

開発チームメンバーなんているかわからないけど…(´;ω;`)