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