差分
ナビゲーションに移動
検索に移動
ページの作成:「ASP.NET MVCの'''アクション'''とは、フロントコントローラーから呼び出されるコントローラークラスのメソッドのことである...」
[[ASP.NET MVC]]の'''アクション'''とは、フロントコントローラーから呼び出されるコントローラークラスのメソッドのことである。コントローラーのうち、プログラマーが記述する部分を指す。
== フォルダー構成 ==
ASP.NET MVCでは「Controllers」ディレクトリ以下にコントローラークラスを格納することになっている。
== MVC ==
MVCの原則に従えば、コントローラーはモデルとビューを繋ぐのが主目的なので、コントローラーアクションにはモデルからデータを取得し、適切なビューに橋渡しする処理のみを書く。たとえばPCとスマートフォンでビューを切り替えるなどのビジネスロジックでもHTMLの生成でもない連結器としての機能を書いておく。
ここにビジネスロジックを書いてはいけない。書けないわけではなく、「書くな」という決まり事であり、書けるし、書いた方が手っ取り早いが、サイトが肥大化したときにスパゲッティになるよねということらしい。
=== 悪い例 ===
コントローラークラスのアクション(Indexメソッド)内にビジネスロジックを記述してある。
<source lang="csharp">
// Controllers/HomeController.cs
public class HomeController : Controller
{
public ActionResult Index()
{
ViewData["Message"] = "ASP.NET MVC へようこそ";
return View();
}
}
</source>
=== 良い例 ===
<source lang="csharp">
// Models/HelloModel.cs
public class HelloModel
{
public static string Say()
{
return "ASP.NET MVC へようこそ";
}
}
</source>
<source lang="csharp">
// Controllers/HomeController.cs
public class HomeController : Controller
{
public ActionResult Index()
{
ViewData["Message"] = HelloModel.Say();
return View();
}
}
</source>
== フォルダー構成 ==
ASP.NET MVCでは「Controllers」ディレクトリ以下にコントローラークラスを格納することになっている。
== MVC ==
MVCの原則に従えば、コントローラーはモデルとビューを繋ぐのが主目的なので、コントローラーアクションにはモデルからデータを取得し、適切なビューに橋渡しする処理のみを書く。たとえばPCとスマートフォンでビューを切り替えるなどのビジネスロジックでもHTMLの生成でもない連結器としての機能を書いておく。
ここにビジネスロジックを書いてはいけない。書けないわけではなく、「書くな」という決まり事であり、書けるし、書いた方が手っ取り早いが、サイトが肥大化したときにスパゲッティになるよねということらしい。
=== 悪い例 ===
コントローラークラスのアクション(Indexメソッド)内にビジネスロジックを記述してある。
<source lang="csharp">
// Controllers/HomeController.cs
public class HomeController : Controller
{
public ActionResult Index()
{
ViewData["Message"] = "ASP.NET MVC へようこそ";
return View();
}
}
</source>
=== 良い例 ===
<source lang="csharp">
// Models/HelloModel.cs
public class HelloModel
{
public static string Say()
{
return "ASP.NET MVC へようこそ";
}
}
</source>
<source lang="csharp">
// Controllers/HomeController.cs
public class HomeController : Controller
{
public ActionResult Index()
{
ViewData["Message"] = HelloModel.Say();
return View();
}
}
</source>