「ASP.NET MVC/アクション」の版間の差分

imported>Administrator
imported>Administrator
 
(同じ利用者による、間の10版が非表示)
1行目: 1行目:
[[ASP.NET MVC]]の'''アクション'''とは、フロントコントローラーから呼び出されるコントローラークラスのメソッドのことである。コントローラーのうち、プログラマーが記述する部分を指す。
[[ASP.NET MVC]]の'''アクション'''とは、[[フロントコントローラー]]から呼び出されるコントローラークラス(「[[Controller クラス (System.Web.Mvc)]]」の派生クラス)のメソッドのことで、ASP.NET MVCのコントローラーのうち、[[プログラマー]]が記述する部分をさす。
 
アクション(コントローラークラス内のメソッド)を記述するためのコントローラークラス自体は「[[Controller クラス (System.Web.Mvc)]]」を継承して作成する。
<source lang="csharp">
    using System.Web.Mvc;
 
    // コントローラークラスの
    public class HomeController : Controller
    {
        // アクション(メソッド)
        public ActionResult Index()
        {
            return View();
        }
    }
</source>


== フォルダー構成 ==
== フォルダー構成 ==
ASP.NET MVCでは「Controllers」ディレクトリ以下にコントローラークラスを格納することになっている。
[[ASP.NET MVC]]では、「Controllers」ディレクトリ以下にコントローラークラスを格納することになっている。
 
== 戻り値 ==
[[ASP.NET MVC]]のアクションは必ず[[ActionResultクラス]]のインスタンスを返すことになっている。
標準で用意されているActionResultから派生したクラスの種類などの、詳細は「[[ActionResult クラス (System.Web.Mvc)]]」を参照。


== MVC ==
== MVC ==
MVCの原則に従えば、コントローラーはモデルとビューを繋ぐのが主目的なので、コントローラーアクションにはモデルからデータを取得し、適切なビューに橋渡しする処理のみを書く。たとえばPCとスマートフォンでビューを切り替えるなどのビジネスロジックでもHTMLの生成でもない連結器としての機能を書いておく。
[[MVC]]の原則に従えば、[[コントローラー]]は[[モデル]]と[[ビュー]]を繋ぐのが主目的なので、コントローラーアクションにはモデルからデータを取得し、適切なビューに橋渡しする処理のみを書く。たとえば[[PC]]と[[スマートフォン]]でビューを切り替えるなどの[[ビジネスロジック]]でも[[HTML]]の生成でもない、あくまで連結器としての機能のみを[[コントローラークラス]]に書いておく。


ここにビジネスロジックを書いてはいけない。書けないわけではなく、「書くな」という決まり事であり、書けるし、書いた方が手っ取り早いが、サイトが肥大化したときにスパゲッティになるよねということらしい。
コントローラーにビジネスロジックを書いてはいけない。書けないわけではなく、「書くな」という決まり事であり、書けるし、書いた方が手っ取り早いし、書いている人も多いが、サイトが肥大化したときに[[スパゲッティ]]になるよね、ということらしい。


=== 悪い例 ===
=== 悪い例 ===
コントローラークラスのアクション(Indexメソッド)内にビジネスロジックを記述してある。
HomeコントローラークラスのIndexアクション(Indexメソッド)内にビジネスロジックを記述してある。
<source lang="csharp">
<source lang="csharp">
// Controllers/HomeController.cs
// Controllers/HomeController.cs
22行目: 41行目:
     }
     }
</source>
</source>
=== 良い例 ===
=== 良い例 ===
モデルでデータを管理する。
モデルでデータを管理する。