Mortal Kombat! ASP.NET MVC vs ASP.NET Webforms – ASP.NET MVC is amazing
【12-D-3】 ASP.NET MVC - 概要と仕組み
-
Upload
devsumi2009 -
Category
Documents
-
view
4.864 -
download
4
Transcript of 【12-D-3】 ASP.NET MVC - 概要と仕組み
![Page 1: 【12-D-3】 ASP.NET MVC - 概要と仕組み](https://reader035.fdocuments.net/reader035/viewer/2022081811/5561fa81d8b42a25488b4db3/html5/thumbnails/1.jpg)
小野小野 修司修司
あおい情報システム株式会社あおい情報システム株式会社
12-D-3
ASP.NETASP.NET MVCMVC -- 概要と仕組み概要と仕組み
![Page 2: 【12-D-3】 ASP.NET MVC - 概要と仕組み](https://reader035.fdocuments.net/reader035/viewer/2022081811/5561fa81d8b42a25488b4db3/html5/thumbnails/2.jpg)
ASP.NETASP.NET MVCMVCとはとは
MM -- ModelModelVV -- ViewViewCC -- ControllerController
MVCMVCパターンをパターンをASP.NETASP.NET上に実装上に実装
![Page 3: 【12-D-3】 ASP.NET MVC - 概要と仕組み](https://reader035.fdocuments.net/reader035/viewer/2022081811/5561fa81d8b42a25488b4db3/html5/thumbnails/3.jpg)
ASP.NETASP.NET MVCMVC RCRCの内容の内容
ベースはベースはASP.NETASP.NET 3.53.5((SP1SP1))dlldll
System.Web.Mvc.dllSystem.Web.Mvc.dll -- MVCMVCの本体の本体System.Web.Abstractions.dllSystem.Web.Abstractions.dll -- テストのためのクラス群テストのためのクラス群System.Web.Routing.dllSystem.Web.Routing.dll -- SP1SP1と同一と同一
プロジェクトテンプレートプロジェクトテンプレートMVCMVCアプリケーションテンプレートアプリケーションテンプレートMVCMVCテストテンプレートテストテンプレート
VisualVisual StudioStudioの拡張の拡張雛形の作成(雛形の作成(AddAdd Controller/AddController/Add ViewView))ウィンドウ移動補助(ウィンドウ移動補助(GoGo ToTo View/Go ToView/Go To ControllerController))……
![Page 4: 【12-D-3】 ASP.NET MVC - 概要と仕組み](https://reader035.fdocuments.net/reader035/viewer/2022081811/5561fa81d8b42a25488b4db3/html5/thumbnails/4.jpg)
テンプレートの構成テンプレートの構成
Global.asaxGlobal.asaxルーティングの設定ルーティングの設定
ControllersControllersフォルダフォルダコントローラクラス(xxxxコントローラクラス(xxxxControllerController))
HomeControllerHomeController --22枚のページの切り替え(枚のページの切り替え(22アクション)アクション)AccountControllerAccountController -認証のサンプル実装(-認証のサンプル実装(88アクション)アクション)
ModelsModelsフォルダフォルダモデルクラスの定義モデルクラスの定義初期状態は空初期状態は空
ViewsViewsフォルダフォルダコントローラに対応するフォルダコントローラに対応するフォルダフォルダの下層にアクションに対応するフォルダの下層にアクションに対応するViewPageViewPageクラスクラス((aspxaspxファイル:ファイル:<%<% %>%>によるインラインプログラミング)によるインラインプログラミング)
ScriptsScriptsフォルダフォルダJQueryJQuery、、MSMS AJAXAJAXののjsjsファイルを格納ファイルを格納
![Page 5: 【12-D-3】 ASP.NET MVC - 概要と仕組み](https://reader035.fdocuments.net/reader035/viewer/2022081811/5561fa81d8b42a25488b4db3/html5/thumbnails/5.jpg)
ページの呼び出しページの呼び出し
Controller
HomeController.csAbout()
ルート
Views
Controller
About.aspx
ブラウザ
“/Home/About/”
![Page 6: 【12-D-3】 ASP.NET MVC - 概要と仕組み](https://reader035.fdocuments.net/reader035/viewer/2022081811/5561fa81d8b42a25488b4db3/html5/thumbnails/6.jpg)
テストテンプレートの構成テストテンプレートの構成
HomeControllerTestHomeControllerTest22アクションに対してアクションに対して22個のページ切り替えテスト個のページ切り替えテスト
AccountControllerTestAccountControllerTest88アクションに対してアクションに対して2525個の認証動作テスト個の認証動作テスト
![Page 7: 【12-D-3】 ASP.NET MVC - 概要と仕組み](https://reader035.fdocuments.net/reader035/viewer/2022081811/5561fa81d8b42a25488b4db3/html5/thumbnails/7.jpg)
コントローラの雛形追加コントローラの雛形追加
ModelModelの準備の準備POCOPOCO((PlainPlain OldOld CLRCLR ObjectObject)も利用できる)も利用できるIDataErrorInfoIDataErrorInfo により検証を実装できるにより検証を実装できる
AddAdd ControllerControllerアクションメソッドの雛形を生成アクションメソッドの雛形を生成IndexIndexDetailsDetailsCreateCreateCreateCreate((PostPost用)用)EditEditEditEdit((PostPost用)用)
DeleteDeleteは生成されないは生成されないセキュリティ面からセキュリティ面からDeleteDeleteの扱いには注意の扱いには注意
![Page 8: 【12-D-3】 ASP.NET MVC - 概要と仕組み](https://reader035.fdocuments.net/reader035/viewer/2022081811/5561fa81d8b42a25488b4db3/html5/thumbnails/8.jpg)
ビューの雛形追加ビューの雛形追加
AddAdd ViewViewViewView名(自動で設定)名(自動で設定)
ModelModel指定指定
ViewViewのタイプ指定のタイプ指定CreateCreateDetailsDetailsEditEditEmptyEmptyListList
マスターページ指定マスターページ指定
フォルダとフォルダとaspxaspxを生成を生成
![Page 9: 【12-D-3】 ASP.NET MVC - 概要と仕組み](https://reader035.fdocuments.net/reader035/viewer/2022081811/5561fa81d8b42a25488b4db3/html5/thumbnails/9.jpg)
WebWebフォーム(従来型フォーム(従来型ASP.NETASP.NET)) とと ASP.NETASP.NET MVCMVC
![Page 10: 【12-D-3】 ASP.NET MVC - 概要と仕組み](https://reader035.fdocuments.net/reader035/viewer/2022081811/5561fa81d8b42a25488b4db3/html5/thumbnails/10.jpg)
WebWebフォームフォーム (従来型(従来型ASP.NETASP.NET)の特徴)の特徴
コントロールのドラッグ&ドロップコントロールのドラッグ&ドロップイベントドリブンイベントドリブン
ポストバックポストバックビューステートビューステート
コードはできるだけ書かないコードはできるだけ書かないミスの入り込む余地を少なくするミスの入り込む余地を少なくするユーザコントロール/カスタムコントロールの活用ユーザコントロール/カスタムコントロールの活用ロジックはコントロール内に隠蔽ロジックはコントロール内に隠蔽
コントロール指向の開発コントロール指向の開発
![Page 11: 【12-D-3】 ASP.NET MVC - 概要と仕組み](https://reader035.fdocuments.net/reader035/viewer/2022081811/5561fa81d8b42a25488b4db3/html5/thumbnails/11.jpg)
ASP.NETASP.NET MVCMVCの特徴の特徴
コントロールを使わないコントロールを使わない((使えない、ではなく)使えない、ではなく)HTMLHTMLヘルパーヘルパー
URLURL(メソッド)(メソッド) == メッセージパッシングメッセージパッシング
ロジックは責務を負うべき場所に記述ロジックは責務を負うべき場所に記述ModelModel -- ビジネスロジックビジネスロジックControllerController -- 制御ロジック制御ロジックViewView -- できるだけロジックを持たないできるだけロジックを持たない
ユニットテストによりミスの入り込む余地を少なくするユニットテストによりミスの入り込む余地を少なくするModelModel、、ViewViewは置き換えが可能は置き換えが可能
オブジェクト指向の開発オブジェクト指向の開発
![Page 12: 【12-D-3】 ASP.NET MVC - 概要と仕組み](https://reader035.fdocuments.net/reader035/viewer/2022081811/5561fa81d8b42a25488b4db3/html5/thumbnails/12.jpg)
ASP.NETASP.NET MVCMVC の仕組みの仕組み
![Page 13: 【12-D-3】 ASP.NET MVC - 概要と仕組み](https://reader035.fdocuments.net/reader035/viewer/2022081811/5561fa81d8b42a25488b4db3/html5/thumbnails/13.jpg)
ASP.NETASP.NETのページ呼び出しのページ呼び出し
リクエストパスからページのイリクエストパスからページのインスタンスを生成するンスタンスを生成するHttpContextHttpContextののHandlerHandlerプロパプロパティにインスタンスをセットティにインスタンスをセット
HandlerHandlerにセットされているオにセットされているオブジェクトのブジェクトのProcessRequestProcessRequestメソッドを呼び出すメソッドを呼び出す
HttpContext
Handler
Page:IHttpHandler
ProcessRequest()
![Page 14: 【12-D-3】 ASP.NET MVC - 概要と仕組み](https://reader035.fdocuments.net/reader035/viewer/2022081811/5561fa81d8b42a25488b4db3/html5/thumbnails/14.jpg)
MVCMVCルーティングルーティング
MapRouteMapRoute(拡張メソッド)は(拡張メソッド)はMvcRouteHandlerMvcRouteHandlerを利用を利用
MvcHandlerMvcHandlerを取得を取得
リクエストパスを書き換えるリクエストパスを書き換える~/UrlRouting.axd~/UrlRouting.axd
リクエストパスからページのイリクエストパスからページのインスタンスを生成するンスタンスを生成するHttpContextHttpContextののHandlerHandlerプロパプロパティにインスタンスをセットティにインスタンスをセットHandlerHandlerををMvcHandlerMvcHandlerに置に置き換えるき換えるHandlerHandlerにセットされているオにセットされているオブジェクトのブジェクトのProcessRequestProcessRequestメソッドを呼び出すメソッドを呼び出す
HttpContext
Handler
MvcHandler:IHttpHandler
ProcessRequest()
![Page 15: 【12-D-3】 ASP.NET MVC - 概要と仕組み](https://reader035.fdocuments.net/reader035/viewer/2022081811/5561fa81d8b42a25488b4db3/html5/thumbnails/15.jpg)
MvcHandlerMvcHandlerのの ProcessRequestProcessRequest内の処理内の処理
1.1. ControllerControllerのインスタンスを生成のインスタンスを生成2.2. URLURLに指定されているアクションを実行に指定されているアクションを実行
メソッドを呼び出し、メソッドを呼び出し、ActionResultActionResultを受け取るを受け取る
3.3. ActionResultActionResultののExecuteResultExecuteResultを呼び出すを呼び出す返されたのが返されたのがViewResultViewResultの場合(の場合(ViewViewメソッド)メソッド)
ViewPageViewPageのインスタンスを生成するのインスタンスを生成する((CreateInstanceFromVirtualPathCreateInstanceFromVirtualPathメソッド)メソッド)ViewPageViewPageののProcessRequestProcessRequestを呼び出すを呼び出す
返されたのが返されたのがRedirectResultRedirectResultの場合の場合((RedirectRedirectメソッド)メソッド)
Response.RedirectResponse.Redirectを実行するを実行する
![Page 16: 【12-D-3】 ASP.NET MVC - 概要と仕組み](https://reader035.fdocuments.net/reader035/viewer/2022081811/5561fa81d8b42a25488b4db3/html5/thumbnails/16.jpg)
ASP.NETASP.NET MVCMVCの仕組みの仕組み
ASP.NETASP.NETフレームワークの柔軟性、拡張性フレームワークの柔軟性、拡張性
を活かして構築されたものを活かして構築されたもの
ASP.NETASP.NETの機能を利用することが可能の機能を利用することが可能
認証認証
セッション管理セッション管理 等等
WebWebフォームと共に利用することも可能フォームと共に利用することも可能
![Page 17: 【12-D-3】 ASP.NET MVC - 概要と仕組み](https://reader035.fdocuments.net/reader035/viewer/2022081811/5561fa81d8b42a25488b4db3/html5/thumbnails/17.jpg)
誰がための誰がためのASP.NETASP.NET MVCMVC