Top Banner
ASP.NET MVC 1.0 おおおお おおおお (shot)
43

ASP.NET MVC 1.0

May 27, 2015

Download

Technology

Shinpei Ohtani
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: ASP.NET MVC 1.0

ASP.NET MVC 1.0

おおたに しんぺい (shot)

Page 2: ASP.NET MVC 1.0

自己紹介

名前おおたに しんぺい

ブログhttp://d.hatena.ne.jp/shot6/

所属T2プロジェクト

http://t-2.googlecode.com

電通国際情報サービスhttp://www.isid.co.jp

Page 3: ASP.NET MVC 1.0

本日のゴール

ASP.NET MVCに興味をもってもらうREST系フレームワーク時代の到来

ASP.NET MVCを通じて、 URLを使ったコンポーネントの呼び出し機能の実現方法

ASP.NET MVCの機能の説明

Page 4: ASP.NET MVC 1.0

本日の目次

ASP.NET MVCとは何故 ASP.NET MVCかASP.NET MVCの機能

基本的な仕組み機能

メリット・デメリットデモまとめ

Page 5: ASP.NET MVC 1.0

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

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

ASP.NET MVCとは

テスト駆動開発最初からテスト駆動で開発できるようになっている

ただし、 VS2008 Expressでは出来ない。Ajaxサポートの充実

jQueryとMS独自の AjaxライブラリASP.NET MVCで既に Ajax用の仕組みが入る

Page 8: ASP.NET MVC 1.0

何故 ASP.NET MVCか

わかりやすい。特に StrutsなどのアクションベースWebフレームワークに慣れている開発者は。

コードも比較的キレイですコードがオープンですぐにわかる。拡張ポイントが多い

主要コンポーネントはほぼ全て拡張可能ただし現状ドキュメント不足

Page 9: ASP.NET MVC 1.0

何故 ASP.NET MVCか

MSが本気!IDEの対応度合いが本気

ひな形プロジェクトの生成が可能 (VS2010で標準へ )

テーブルからモデルを自動生成、そしてController の作成して結びつけるだけ

規約ベースの開発URLをつかって規約で呼び出し先を決める自分でルーティング先も変更可能

Page 10: ASP.NET MVC 1.0

ASP.NET MVCの機能

基本的な仕組み機能

Page 11: ASP.NET MVC 1.0

ASP.NET MVCの機能

基本的な仕組み機能

Page 12: ASP.NET MVC 1.0

基本的な仕組み (MVC)

基本はMVC構成Modelはテーブルのエンティティ

基本自動生成したものに手を加えるっぽい• 見たサンプルでは Repositoryパターンもあった• かつ、プレゼンテーションモデルもある

Viewは aspx親クラスは ViewPage<Model>

Controllerは IControllerのサブクラスフロントコントローラパターン

Page 13: ASP.NET MVC 1.0

基本的な仕組み (MVC)

Model

View

Controller

<<framework>>IController

ViewはModelを知っている

ControllerはModelを Viewと関連づける

<<framework>>ViewPage<T>

Page 14: ASP.NET MVC 1.0

基本的な仕組み (ASP.NET)

ASP.NETとの関係ASP.NET上に搭載されている。

ViewStateは使わずASP.NETのWebFormでなく、独自の Form

よりユーザがコントローラブルなのが特徴

Page 15: ASP.NET MVC 1.0

基本的な仕組み( URLマッチ)

URLと Controllerの規約http://ドメイン名 /コントローラ名 /アクション名 /パラメータ

コントローラ名HogeController -> Hogeになる

アクション名メソッド名そのまま

パラメータメソッドの引数になる

Page 16: ASP.NET MVC 1.0

基本的な仕組み( URLマッチ)

どうして URLとコントローラがマッピングされるのか?そういう設定がされている。ASP.MVCプロジェクトではルーティング設定を設定するコードが生成されるGlobal.aspx.csに記述

ルーティング設定を拡張すれば、独自に設定する事も可能

Page 17: ASP.NET MVC 1.0

基本的な仕組み( URLマッチ)

デフォルトマッピングはこんな感じ

→つまり /コントローラ名 /アクション名 /…となる

routes.MapRoute( “Default”, // このルーティング設定の名前 “{controller}/{action}/{id}”, // URL の形式 new { controller = "Home", action = "Index", id = "" } // デフォルトの遷移先);

Page 18: ASP.NET MVC 1.0

基本的な仕組み(全体の流れ)

ASP.NETの機能拡張のみで実装エントリポイントは

UrlRoutingModule(WebConfig)ASP.NETのルーティング機能を使う

<httpModules> <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, … /></httpModules>

Page 19: ASP.NET MVC 1.0

基本的な仕組み(全体の流れ)

つまり、、、UrlRoutingModule

MvcHandler

Page 20: ASP.NET MVC 1.0

基本的な仕組み(全体の流れ)

Global.asax.csを読んでルーティングテーブル作成

UrlRoutingModuleはテーブルから最初にマッチしたルーティングを適用する

MvcRouteHandlerがMvcHandlerを作る

MvcRouteHandlerが ControllerFactoryを使ってControllerを作る

Controller.Execute()実行

Viewの結果とそのレンダリングを含むViewResultの生成と実行

Page 21: ASP.NET MVC 1.0

ASP.NET MVCの機能

基本的な仕組み機能

Page 22: ASP.NET MVC 1.0

Controller生成機能何はなくても Visual Studio

ASP.NET MVCプロジェクトの生成

Page 23: ASP.NET MVC 1.0

Controller生成機能Controllers

Controllerクラスをおく

Page 24: ASP.NET MVC 1.0

Controller生成機能Controllers

Controllerクラスは VSで簡単に追加できる決めるのは Controller名CRUDのどの操作の機能を足すか→自動生成

Page 25: ASP.NET MVC 1.0

Controller

生成された ControllerControllerクラスは

System.Web.Mvc.Controllerの子クラスアクションメソッドの戻り値は ActionResult

実質上は Viewにおいてある、 aspxを指定標準的な出力されるメソッドは、

Index : 一覧表示(デフォルト呼び出し)Details : 詳細画面表示Create : モデルの新規追加Edit : 既存モデルの修正

Page 26: ASP.NET MVC 1.0

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

Controllerが返す ActionResult

ActionResult返すべき Viewの形とそのレンダリング方法を示す

ViewResult最も標準的なレスポンス。呼び出したメソッド名

RedirectToAction(“controller”)該当コントローラにリダイレクト

JsonResultFileContentResultFileStreamResult

Page 28: ASP.NET MVC 1.0

Model生成機能Models

Modelクラスをおく

Page 29: ASP.NET MVC 1.0

Model生成機能Modelは RDBMSのエンティティ

ADO.NET Entityや LINQ to SQLなど選択可能

Page 30: ASP.NET MVC 1.0

Views生成機能Viewは Viewsフォルダに配置する

Viewsは階層構造になる

Page 31: ASP.NET MVC 1.0

Views生成機能

各 ViewはユースケースごとController 1つに対して、フォルダ1つControllerの各アクションと Viewが 1対 1が基本

Controllerの各アクションに対応

Page 32: ASP.NET MVC 1.0

Views生成機能

Controllerから自動生成も可能Controllerのアクション内で Viewの生成

Viewの名前

Viewで使うモデルとCRUD 種類を指定

Page 33: ASP.NET MVC 1.0

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

ルーティング

ルーティングは 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

メリット・デメリット

メリット非常にわかりやすい

アクションドリブン小さく使いやすいコントローラブルでパフォーマンスも良好JavaのWebアプリ開発者からの移行はスムー

ズに出来る

Page 36: ASP.NET MVC 1.0

メリット・デメリット

デメリット逆に ASP.NETに慣れている人にはつらい

イベントドリブンリッチな画面を作るには別途 Controlを作る従来の ASP.NET 資産の移行がどの程度できるかわからない

URL設計が必要になる

Page 37: ASP.NET MVC 1.0

MVC 対 ASPASP.NET MVC vs ASP.NET(By MS)

コントローラMVC :フロントコントローラASP :ページコントローラ

状態MVC:ステートレス( ViewStateなし)ASP :ステートフル( ViewStateあり)

チームの適用規模MVC: 大きいチームASP :小さいチーム

Page 38: ASP.NET MVC 1.0

デモよくある CRUD系アプリケーション

Page 39: ASP.NET MVC 1.0

余談

.NET開発もいよいよ本格的にオープンに。時代は変わった。REST系への力の入れ具合が伺える

RESTライクなフレームワークが、これからの主流。

コードハック的な話ASP.NET MVCはソースも小さく読みやすい現状16000ステップ程度ASP.NETの拡張としても良い例

Page 40: ASP.NET MVC 1.0

余談2

こんな感じで調べました。もし欲しいという人いたら後で教えてください

Page 41: ASP.NET MVC 1.0

まとめ

ASP.NET MVC 良い!Java 屋観点からすると使いやすいASP.NETにあった、とっつきにくさが無いIDEも対応してるので、非常に楽。

今後の .NETでのWeb開発のデファクトになる可能性が高い→とりあえず はじめてみよう MVC

Page 42: ASP.NET MVC 1.0

参考文献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

おわり

     どうもありがとうございました。