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 = &quot;Home&quot;, action = &quot;Index&quot;, id = &quot;&quot; }  //  デフォルトの遷移先 );
基本的な仕組み(全体の流れ) ASP.NET の機能拡張のみで実装 エントリポイントは UrlRoutingModule(WebConfig) ASP.NET のルーティング機能を使う <httpModules> <add name=&quot; UrlRoutingModule &quot;  type=&quot; 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 生成された Controller Controller クラスは 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”) 該当コントローラにリダイレクト JsonResult FileContentResult FileStreamResult
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 は asp Inherits 指定で、 System.Web.Mvc.ViewPage <T> <%@ Page Title=&quot;&quot; Language=&quot;C#&quot; MasterPageFile=&quot;~/Views/Shared/Site.Master&quot;  Inherits=&quot; System.Web.Mvc.ViewPage<IEnumerable<MovieApp.Models.Movie>> &quot; %> <asp:Content ID=&quot;Content1&quot; ContentPlaceHolderID=&quot;head&quot; runat=&quot;server&quot;> <title>Index</title> </asp:Content> <asp:Content ID=&quot;Content2&quot; ContentPlaceHolderID=&quot;MainContent&quot; runat=&quot;server&quot;> <h2>Index</h2> …… <% foreach (var item in Model) { %> <tr> <td> <%= Html.ActionLink(&quot;Edit&quot;, &quot;Edit&quot;, new { /* id=item.PrimaryKey */ }) %> | <%= Html.ActionLink(&quot;Details&quot;, &quot;Details&quot;, new { /* id=item.PrimaryKey */ })%> </td> <td> ……
ルーティング ルーティングは Global.asax.cs に記述 自分用に URL を自在に変更可能 カスタマイズする場合 MvcApplication.RegisterRoutes メソッドに記述 デフォルトルートよりも優先して記述 /hello/greeting/ 名前を /hello/ 名前に変更する場合 routes.MapRoute(&quot;helloid&quot;, &quot; hello/{id}&quot; , new { controller=&quot;Hello&quot;, action=”greeting&quot;, id=&quot;&quot; });
メリット・デメリット メリット 非常にわかりやすい アクションドリブン 小さく使いやすい コントローラブルでパフォーマンスも良好 Java の Web アプリ開発者からの移行はスムーズに出来る
メリット・デメリット デメリット 逆に ASP.NET に慣れている人にはつらい イベントドリブン リッチな画面を作るには別途 Control を作る 従来の ASP.NET 資産の移行がどの程度できるかわからない URL 設計が必要になる
MVC  対  ASP ASP.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 Routing http://learn. iis .net/page. aspx /496/ iis-url-rewriting-and-aspnet-routing / ASP.NET Routing http://msdn.microsoft.com/en-us/library/cc668201.aspx
おわり      どうもありがとうございました。

ASP.NET MVC 1.0

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