asp.net mvc 1.0
TRANSCRIPT
ASP.NET MVC 1.0
おおたに しんぺい (shot)
自己紹介
名前おおたに しんぺい
ブログhttp://d.hatena.ne.jp/shot6/
所属T2プロジェクト
http://t-2.googlecode.com
電通国際情報サービスhttp://www.isid.co.jp
本日のゴール
ASP.NET MVCに興味をもってもらうREST系フレームワーク時代の到来
ASP.NET MVCを通じて、 URLを使ったコンポーネントの呼び出し機能の実現方法
ASP.NET MVCの機能の説明
本日の目次
ASP.NET MVCとは何故 ASP.NET MVCかASP.NET MVCの機能
基本的な仕組み機能
メリット・デメリットデモまとめ
ASP.NET MVCとは
.NET環境でMVCを実現するフレームワーク2009/03/17に 1.0リリース
オープンソースhttp://aspnet.codeplex.com/Release/
ProjectReleases.aspx?ReleaseId=24471 からダウンロード可能
ASP.NET MVCとは
.NET 3.5で動作コードは C#/VB.NETで記述可能
VisualStudioの拡張ツールもあるVS2008から。規約にそって開発
ASP.NETのしがらみを受けないきれいな URLの実現
http://hogehoge.com/foo/account
ASP.NET MVCとは
テスト駆動開発最初からテスト駆動で開発できるようになっている
ただし、 VS2008 Expressでは出来ない。Ajaxサポートの充実
jQueryとMS独自の AjaxライブラリASP.NET MVCで既に Ajax用の仕組みが入る
何故 ASP.NET MVCか
わかりやすい。特に StrutsなどのアクションベースWebフレームワークに慣れている開発者は。
コードも比較的キレイですコードがオープンですぐにわかる。拡張ポイントが多い
主要コンポーネントはほぼ全て拡張可能ただし現状ドキュメント不足
何故 ASP.NET MVCか
MSが本気!IDEの対応度合いが本気
ひな形プロジェクトの生成が可能 (VS2010で標準へ )
テーブルからモデルを自動生成、そしてController の作成して結びつけるだけ
規約ベースの開発URLをつかって規約で呼び出し先を決める自分でルーティング先も変更可能
ASP.NET MVCの機能
基本的な仕組み機能
ASP.NET MVCの機能
基本的な仕組み機能
基本的な仕組み (MVC)
基本はMVC構成Modelはテーブルのエンティティ
基本自動生成したものに手を加えるっぽい• 見たサンプルでは Repositoryパターンもあった• かつ、プレゼンテーションモデルもある
Viewは aspx親クラスは ViewPage<Model>
Controllerは IControllerのサブクラスフロントコントローラパターン
基本的な仕組み (MVC)
Model
View
Controller
<<framework>>IController
ViewはModelを知っている
ControllerはModelを Viewと関連づける
<<framework>>ViewPage<T>
基本的な仕組み (ASP.NET)
ASP.NETとの関係ASP.NET上に搭載されている。
ViewStateは使わずASP.NETのWebFormでなく、独自の Form
よりユーザがコントローラブルなのが特徴
基本的な仕組み( URLマッチ)
URLと Controllerの規約http://ドメイン名 /コントローラ名 /アクション名 /パラメータ
コントローラ名HogeController -> Hogeになる
アクション名メソッド名そのまま
パラメータメソッドの引数になる
基本的な仕組み( URLマッチ)
どうして URLとコントローラがマッピングされるのか?そういう設定がされている。ASP.MVCプロジェクトではルーティング設定を設定するコードが生成されるGlobal.aspx.csに記述
ルーティング設定を拡張すれば、独自に設定する事も可能
基本的な仕組み( URLマッチ)
デフォルトマッピングはこんな感じ
→つまり /コントローラ名 /アクション名 /…となる
routes.MapRoute( “Default”, // このルーティング設定の名前 “{controller}/{action}/{id}”, // URL の形式 new { controller = "Home", action = "Index", id = "" } // デフォルトの遷移先);
基本的な仕組み(全体の流れ)
ASP.NETの機能拡張のみで実装エントリポイントは
UrlRoutingModule(WebConfig)ASP.NETのルーティング機能を使う
<httpModules> <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, … /></httpModules>
基本的な仕組み(全体の流れ)
つまり、、、UrlRoutingModule
MvcHandler
基本的な仕組み(全体の流れ)
Global.asax.csを読んでルーティングテーブル作成
UrlRoutingModuleはテーブルから最初にマッチしたルーティングを適用する
MvcRouteHandlerがMvcHandlerを作る
MvcRouteHandlerが ControllerFactoryを使ってControllerを作る
Controller.Execute()実行
Viewの結果とそのレンダリングを含むViewResultの生成と実行
ASP.NET MVCの機能
基本的な仕組み機能
Controller生成機能何はなくても Visual Studio
ASP.NET MVCプロジェクトの生成
Controller生成機能Controllers
Controllerクラスをおく
Controller生成機能Controllers
Controllerクラスは VSで簡単に追加できる決めるのは Controller名CRUDのどの操作の機能を足すか→自動生成
Controller
生成された ControllerControllerクラスは
System.Web.Mvc.Controllerの子クラスアクションメソッドの戻り値は ActionResult
実質上は Viewにおいてある、 aspxを指定標準的な出力されるメソッドは、
Index : 一覧表示(デフォルト呼び出し)Details : 詳細画面表示Create : モデルの新規追加Edit : 既存モデルの修正
Controllerの抜粋public class HogeController : Controller{ public ActionResult Index() { return View();//Index.aspxに遷移したいと判断 }
[AcceptVerbs(HttpVerbs.Post)] public ActionResult Create(FormCollection collection) { try { return RedirectToAction(“Index”);//IndexControllerに委譲 } catch { return View(); } }}
Controllerが返す ActionResult
ActionResult返すべき Viewの形とそのレンダリング方法を示す
ViewResult最も標準的なレスポンス。呼び出したメソッド名
RedirectToAction(“controller”)該当コントローラにリダイレクト
JsonResultFileContentResultFileStreamResult
Model生成機能Models
Modelクラスをおく
Model生成機能Modelは RDBMSのエンティティ
ADO.NET Entityや LINQ to SQLなど選択可能
Views生成機能Viewは Viewsフォルダに配置する
Viewsは階層構造になる
Views生成機能
各 ViewはユースケースごとController 1つに対して、フォルダ1つControllerの各アクションと Viewが 1対 1が基本
Controllerの各アクションに対応
Views生成機能
Controllerから自動生成も可能Controllerのアクション内で Viewの生成
Viewの名前
Viewで使うモデルとCRUD 種類を指定
View
Viewは aspInherits指定で、 System.Web.Mvc.ViewPage<T><%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<IEnumerable<MovieApp.Models.Movie>>" %><asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
<title>Index</title></asp:Content><asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> <h2>Index</h2>……<% foreach (var item in Model) { %> <tr> <td> <%= Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) %> | <%= Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ })%> </td> <td>……
ルーティング
ルーティングは Global.asax.csに記述自分用に URLを自在に変更可能
カスタマイズする場合MvcApplication.RegisterRoutesメソッドに記述デフォルトルートよりも優先して記述/hello/greeting/名前を /hello/名前に変更する場合routes.MapRoute("helloid", "hello/{id}", new
{ controller="Hello", action=”greeting", id="" });
メリット・デメリット
メリット非常にわかりやすい
アクションドリブン小さく使いやすいコントローラブルでパフォーマンスも良好JavaのWebアプリ開発者からの移行はスムー
ズに出来る
メリット・デメリット
デメリット逆に ASP.NETに慣れている人にはつらい
イベントドリブンリッチな画面を作るには別途 Controlを作る従来の ASP.NET 資産の移行がどの程度できるかわからない
URL設計が必要になる
MVC 対 ASPASP.NET MVC vs ASP.NET(By MS)
コントローラMVC :フロントコントローラASP :ページコントローラ
状態MVC:ステートレス( ViewStateなし)ASP :ステートフル( ViewStateあり)
チームの適用規模MVC: 大きいチームASP :小さいチーム
デモよくある CRUD系アプリケーション
余談
.NET開発もいよいよ本格的にオープンに。時代は変わった。REST系への力の入れ具合が伺える
RESTライクなフレームワークが、これからの主流。
コードハック的な話ASP.NET MVCはソースも小さく読みやすい現状16000ステップ程度ASP.NETの拡張としても良い例
余談2
こんな感じで調べました。もし欲しいという人いたら後で教えてください
まとめ
ASP.NET MVC 良い!Java 屋観点からすると使いやすいASP.NETにあった、とっつきにくさが無いIDEも対応してるので、非常に楽。
今後の .NETでのWeb開発のデファクトになる可能性が高い→とりあえず はじめてみよう MVC
参考文献ASP.NET MVCサイト
http://www.asp.net/mvc/
Scott Guさんのブログhttp://weblogs.asp.net/scottgu/
IIS & ASP.NET Routinghttp://learn.iis.net/page.aspx/496/
iis-url-rewriting-and-aspnet-routing/
ASP.NET Routinghttp://msdn.microsoft.com/en-us/library/
cc668201.aspx
おわり
どうもありがとうございました。