58
mvcConf @:Japan ~ ASP.NET MVC ブート キャンプ ~ 最初に全体を押さえよう ASP.NET MVC オーバービュー 株式会社シーエスゕ CLR/H・せきゅぽろ代表 長田 直樹 (おさだ なおき) cs.gogo-asp.net/blogs/naoki/ twitter.com/naoki0311

Mvc conf session_1_osada

Embed Size (px)

DESCRIPTION

mvcConf @:Japan ~ ASP.NET MVC ブートキャンプ ~ の資料です

Citation preview

Page 1: Mvc conf session_1_osada

mvcConf @:Japan ~ ASP.NET MVC ブート キャンプ ~

最初に全体を押さえよう ASP.NET MVC オーバービュー

株式会社シーエスゕ CLR/H・せきゅぽろ代表 長田 直樹 (おさだ なおき)

cs.gogo-asp.net/blogs/naoki/ twitter.com/naoki0311

Page 2: Mvc conf session_1_osada

セッションの目的とゴール

目的 ASP.NET の全体像を知る ASP.NET MVC の概要をおさえる

ゴール ASP.NET ゕプリケーションの特色を話せる ASP.NET MVC のゕーキテクチャの説明できる 本日全てのセッションの足掛かり部分を会得する

2

Page 3: Mvc conf session_1_osada

Agenda

1. ASP.NET と Visual Studio

2. ASP.NET MVC によるサト構築例

3. ASP.NET MVC 概要~Rails を追いかける~

4. まとめ

3

Page 4: Mvc conf session_1_osada

ASP.NET と Visual Studio

まずはおさらい

4

Page 5: Mvc conf session_1_osada

•Visual Studio.NET •Visual Studio.NET 2003 •.NET 対応の ASP として登場

ASP.NETの歴史 ~ASP.NET MVC は実は最近の登場~

ASP.NET Web Form 1.0 / 1.1

2002年~2003年頃

出始めという事で痒い所に手が届き辛い時代

Page 6: Mvc conf session_1_osada

ASP.NETの歴史 ~ASP.NET MVC は実は最近の登場~

ASP.NET Web Form 1.0 / 1.1

ASP.NET Web Form 2.0 •Visual Studio 2005 •サーバーコントロールの拡充 •データソースコントロール等 •AJAX 対応

Web ゕプリの需要が 高まり、AJAX も実用へ

2005年~2008年頃

Page 7: Mvc conf session_1_osada

•Visual Studio 2008 •LINQ 対応

SP1にて •ADO.NET Entity Framework 対応 •WCF Data Services 対応 •ASP.NET 動的データ 対応

ASP.NETの歴史 ~ASP.NET MVC は実は最近の登場~

7

ASP.NET Web Form 1.0 / 1.1

Web Form が 一種の完成形へ

RESTful な URL や Web 標準が ”特に “ 意識されやすくなる

ASP.NET Web Form 2.0

ASP.NET Web Form 3.5 / 3.5 SP1

Page 8: Mvc conf session_1_osada

ASP.NETの歴史 ~ASP.NET MVC は実は最近の登場~

8

ASP.NET MVC 1.0 •Visual Studio 2008 •MVC 開発のサポート •RESTful な URL •HTML ヘルパー対応 •単体テストの容易性

Web Form では対応しきれない ニーズに応える形で誕生

ASP.NET Web Form 3.5 / 3.5 SP1

Page 9: Mvc conf session_1_osada

ASP.NETの歴史 ~ASP.NET MVC は実は最近の登場~

9

ASP.NET MVC 1.0

ASP.NET MVC 2.0 •Visual Studio 2010 /2008

•.NET 3.5 / 4 両方に対応 •検証機能の強化 •強く型付されたヘルパー •エリゕ機能 •jQuery の統合

業務で活用できる レベルに到達!

ASP.NET Web Form 3.5 / 3.5 SP1

ASP.NET Web Form 4

Page 10: Mvc conf session_1_osada

ASP.NETの歴史 ~ASP.NET MVC は実は最近の登場~

10

•Visual Studio 2010 •jQuery UI などの統合 •Razor 対応 •Tools Update にて

•Entity Framework 4.1 統合 •スキャフォールデゖング強化

HTML5 対応や 携帯電話ゕプリへの需要

クラウドへの デプロなど…

ASP.NET Web Form 3.5 / 3.5 SP1

ASP.NET MVC 1.0 ASP.NET MVC 2.0(ASP.NET Web Form 4)

ASP.NET MVC 3

Page 11: Mvc conf session_1_osada

ASP.NETとVisual Studio フレームワーク構成図

11

.NET Framework 4

ASP.NET 4

Web フォーム ASP.NET MVC 2, 3

ASP.NET AJAX

動的データ

Page 12: Mvc conf session_1_osada

本来 Web 開発に必要な知識

HTTP URI HTML REST

12

Page 13: Mvc conf session_1_osada

ASP.NETとは? Web 開発のフレームワーク

動的 Web ゕプリケーションの開発・実行基盤 サーバー側で動的に HTML を生成 (ASP, PHP 等と同じ)

さまざまな形態の Web 開発に対応 個人規模 Web サト ⇔

大規模 Web ゕプリケーション

13

クライアント

Web ブラウザー

処理ロジック HTML

ASP.NET

ASPX

Razor

サーバー

動的生成

Page 14: Mvc conf session_1_osada

デプロ先は選択へ ~Windows Azure も加わりました~

14

ASP.NET MVC

ASP.NET AJAX

ASP.NET 動的データ

jQuery

ASP.NET

Web Form

ゕプリケーション

ビルド デプロ

Windows Azure

Platform

Windows Server + IIS

詳しくは、勇さんのセッションで!

Page 15: Mvc conf session_1_osada

ASP.NET MVC による

サイト構築例

まだまだ増加中!

15

Page 16: Mvc conf session_1_osada

StackOverflow.com ゕーキテクチャー

トラフゖック 1600万ページ ビュー / 月 300 万 ユニーク ビジター / 月 600万 ビジター / 月

16

Page 17: Mvc conf session_1_osada

17

www.theshodo.com

サーバー サド ASP.NET MVC 3 Windows Azure SQL Azure Azure Storage Blob/Table クラゕント サド HTML5, CSS3, SVG IE9 新機能

Page 18: Mvc conf session_1_osada

その他の採用事例 Microsoft も Web Form から置き換えに…

みにもば 携帯端末向け Twitter クラゕント

http://minimoba.jp/

MSDN / TechNetオンラン

18

Page 19: Mvc conf session_1_osada

ASP.NET MVC 概要 ~Rails を追いかける~

Rails のカルチャーに沿って 概要を紹介

19

Page 20: Mvc conf session_1_osada

ASP.NET MVC 新しいWebゕプリ開発フレームワーク

ASP.NET MVC 1.0(2009年4月) Visual Studio 2008の追加コンポーネントとしてリリース

ASP.NET MVC 2(2010年4月) ASP.NET 4 (Visual Studio 2010) に標準搭載

ASP.NET MVC 3(2011年1月)

20

HTML ベース の UI 開発が容易に UI と処理ロジックが 疎結合 に 単体テスト (TDD) が容易に URL ルーティング が可能に

Page 21: Mvc conf session_1_osada

ASP.NET MVC 3 ~Tools Updateはマナーバージョンゕップに近い~

ASP.NET MVC 3 Tools Update ランタム (System.Web.Mvc.dll) は変更なし プロジェクト テンプレートの機能強化

プロジェクト作成・コントローラー作成などが変化!

21

Windows 認証OK

HTML5 に沿うテンプレート

Page 22: Mvc conf session_1_osada

jQuery もASP.NETへ ~スクリプトフゔルが凄いことに!~

jQuery が標準搭載 AJAX・UI・検証など一通り

標準で揃ってます

ASP.NET MVC 開発者は jQuery の知識も必須になる

HTML5 ゕプリ開発時のサポート となる Modernizr スクリプトも有

22

Page 23: Mvc conf session_1_osada

Demo ~ASP.NET MVC の構成を見てみよう~

23

Page 25: Mvc conf session_1_osada

Rails Culture & Future ~ASP.NET MVC も勿論実装!~

CoC DRY DynamicLanguages ObjectRelationalMapping TestingTools MVC

25

Page 26: Mvc conf session_1_osada

26

CoC DRY

DynamicLanguages ObjectRelationalMapping

TestingTools MVC

Page 27: Mvc conf session_1_osada

Convention over Configuration CoC~規約は設定に勝る~

単純な命名ルールでマッピング可能

27

Controller と View フォルダに関する CoC の関係

Controller と View メソッドとファイルに 関するCoC の関係

Page 28: Mvc conf session_1_osada

28

CoC

DRY DynamicLanguages

ObjectRelationalMapping TestingTools

MVC

Page 29: Mvc conf session_1_osada

Do Not Repeat Yourself DRY原則~重複の削除(現実的には削減…?)~

Global.asax の利用 コントローラー上での属性の指定 スキャフォールデゖング

などなど

29

Page 30: Mvc conf session_1_osada

30

CoC DRY

DynamicLanguages ObjectRelationalMapping

TestingTools MVC

Page 31: Mvc conf session_1_osada

DynamicLanguages ~IronRuby・IronPython~

Dynamic Language Runtime上で動作する動的言語をサポート! 現実的には C# / VB が多い…

31

最新は IronPython 2.7で、 Python 2.7と VS 2010対応が含まれている

最新は IronRuby 1.1.3で、 Ruby 1.9.2と VS 2010対応が含まれている

Page 32: Mvc conf session_1_osada

32

CoC DRY

DynamicLanguages

ObjectRelationalMapping TestingTools

MVC

Page 33: Mvc conf session_1_osada

ObjectRelationalMapping ~エンテゖテゖの活用~

ADO.NET Entity Framework Entity Framework 4.1 Code First

LINQ to SQL

発展形として WCF Data Services もある

33

Page 34: Mvc conf session_1_osada

WCF Data Services Restfulなデータ提供サービス

CRUD 操作できる RESTful なサービス サービス層から DAL へ直接ゕクセス可能 データ共有プロトコルの Odata を使用

34

OData

詳しくは、小野さんのセッションで!

Page 35: Mvc conf session_1_osada

35

CoC DRY

DynamicLanguages ObjectRelationalMapping

TestingTools MVC

Page 36: Mvc conf session_1_osada

TestingTools ~基本は限られてはいる~

MSTest Nunit

Behavior Driven Development もできる! SpecFlow+WatiN 元祖 mvcConf でも出ていました

36

Page 37: Mvc conf session_1_osada

37

CoC DRY

DynamicLanguages ObjectRelationalMapping

TestingTools MVC

Page 38: Mvc conf session_1_osada

Model View Controller

38

HTTP Request

1. Controller が リクエストを受信

2. Controller が Model を初期化

4. Controller が View を呼び出す

5. View が Model を参照

6. View が レスポンスを送信

Model

Controller

View HTTP Response

入力と制御

プレゼンテーション

データ表現と ビジネス ロジック

3. ビジネス ロジック を実行

Page 39: Mvc conf session_1_osada

Model / View / Controller 実装コード例

39

View (.aspx)

Model と Controller public class HomeController : Controller { MyModelService myModel = new MyModelService(); public ActionResult Edit(int id) { MyData md = myModel.GetData(id); return View(md); } }

<html> <p><%: Html.TextBox("data", Model.data) %></p> </html>

Model の準備

HTTP リクエストによる メソッドの実行

(例: Home/Edit/5 )

View の呼び出し ロジックの実行と

データ取得

HTML タグ生成と データの埋め込み

Page 40: Mvc conf session_1_osada

検証機能 DataAnnotationを利用してサーバーとクラゕントサド検証を実現!

属性指定で簡単検証 カスタム属性や

リモート属性も! 40

Entity Data Model

エンテゖテゖ型の Partial クラス

(DataAnnotation 宣言)

Controller (サーバーサド)

View (クラゕントサド)

検証適用

検証宣言

Model

Page 41: Mvc conf session_1_osada

検証機能 ~実装コード例:ポントはメタデータクラスにあり~

41

Model // モデルクラスに関連付けるメタデータクラスの指定 [MetadataType(typeof(publishers_validation))] public partial class publishers { } // publishersエンテゖテゖ型のプロパテゖを記載 public class publishers_validation { [Required] [StringLength(5, ErrorMessage="2文字で入力してください。")] public string pub_name { get; set; } }

DataAnnotation を 指定したクラスを記載 モデルクラス名を部分クラスで記載

属性を指定

該当のプロパテゖ

属性を指定

Model

Page 42: Mvc conf session_1_osada

HTMLを自由自在に操作 ~Web フォームよりも Web 標準に対応しやすい~

意図した HTML が生成されるので Web 標準に対応しやすい 結果として HTML5 対応も Web フォームに比べ

て容易 ViewState や、サーバーコントロールによる

もソース出力が無いのでクリーンなソース! 携帯用サトも作成しやすい

• ※Web フォームを否定しているわけではありません!

View

詳しくは、勇さん、竹原さん のセッションで!

Page 43: Mvc conf session_1_osada

HTMLヘルパーメソッド ~入力や検証の記載をフォロー~

ビューとコントローラー間のデータの受け渡しを簡単に実現するメソッド 値をもとに HTML 出力 強い型付によりンテリセンスの利用も可能 検証機能も有り簡単に利用可能

43

View

View (.aspx) <html> <p><%: Html.TextBox("data", Model.data) %></p> </html>

HTML タグ生成と データの埋め込み

Page 44: Mvc conf session_1_osada

44

Razor (レイザー) !

View

Page 45: Mvc conf session_1_osada

Razor より早く!より効率的に!

ページ記述のための新しい 構文 (記法)

便利なヘルパー ラブラリと容易な拡張 C# (.cshtml), Visual Basic (.vbhtml) をサポート

45

@{ var title = "Hello Razor"; } <h1>@title</h1> <ul> @foreach (var item in products) { <li>@item.Name</li> } </ul> <p>Time is @DateTime.Now</p>

.cshtml

詳しくは、芝村さんのセッションで!

View

Page 46: Mvc conf session_1_osada

ゕクション フゖルター 活用必須の宣言フゖルター

コントローラー呼び出しの前後に宣言されたフゖルタ属性のコードを適用!

HandleError、Authorize、OutputCacheなどの他に、カスタムフゖルターも作成できる

46

Controller

Controller [OutputCache(Duration=60, VaryByParam =“none”)] public ActionResult Edit() { … return View(); }

Page 47: Mvc conf session_1_osada

モデルバンダ― ビューとコントローラー間にモデルを渡す仕組み

WPF / Silverlight で実現しているデータバンデゖングを ASP.NET MVC で実現する仕組み

基本的にHttpContext から値を取り出してモデルクラスを復元 いろいろなデータをもとに値を復元できる

Controller & View

詳しくは、小野さんのセッションで!

Page 48: Mvc conf session_1_osada

URLルーテゖング URLを自由自在に操作!

ゕプリケーション内の URL をここで設定

48

Global.asax

public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", // ルート名 "{controller}/{action}/{id}", // パラメーター付きの URL new { controller = "Home", action = "Index", id = UrlParameter.Optional } // パラメーターの既定値 ); }

特定 URL ルートの 処理を停止させる

ルーテゖングルートをルートコレクションに追加 上記では http://xxx/Home/Index へとルーテゖング

Page 49: Mvc conf session_1_osada

Demo ~実際にMVCアプリを 作ってみよう~

49

Page 50: Mvc conf session_1_osada

NuGetでパッケージをゲット! RubyでいうところのGem

Visual Studio の拡張機能 (Package Manager) オープン ソース ラブラリの容易な利用 GUI / コンソール の 2 通りの利用方法 NuGet gallery を利用したヘルパーの公開

http://nuget.org/

50

詳しくは、芝村さんのセッションで!

Page 51: Mvc conf session_1_osada

まとめ

51

Page 52: Mvc conf session_1_osada

Webフォーム V.S. MVC ご利用は計画的に

52

Web フォーム

豊富なサーバー コントロール

イベント駆動型プログラミング

ASP.NET MVC

HTML ベースの UI 開発

MVC パターン

D & D 配置 容易な UI 開発

Web 標準志向 テスト駆動開発

Page 53: Mvc conf session_1_osada

Web フォーム V.S. MVC 特徴と使い分け

ASP.NET MVC と Web フォーム は使い分けの判断が重要 プロジェクトの要求、ゕプリケーションの仕様、

エンジニゕのスキル、開発手法、チーム編成など ...

53

Web フォーム ASP.NET MVC

豊富なコントロール を使用可能 HTML ベース の UI 開発

ベント駆動型プログラミング ゕクション メソッドによるリクエスト処理

ViewState やポストバック処理を多用する ViewState やポストバック処理を使用しない

ロジックの検証に Web サーバーが必要 ロジックの検証に Web サーバーが不要 (テスト駆動開発をサポート)

Page 54: Mvc conf session_1_osada

まとめ ~一歩進んだ Web 開発のために~

54

標準技術を生かした Web 開発

ASP.NET の豊富な機能を生かした Web 開発

Page 55: Mvc conf session_1_osada

appendix.

55

Page 57: Mvc conf session_1_osada

•Visual Studio 2010

•Visual Studio 2008 •LINQ 対応

•Visual Studio .NET •Visual Studio .NET 2003 •.NET 対応の ASP として登場

ASP.NETの歴史 ~ASP.NET MVC は実は最近の登場~

57

ASP.NET Web Form 1.0/1.1

ASP.NET Web Form 2.0

•Visual Studio 2005 •サーバーコント ロールの拡充 •データソース コントロール等 •AJAX 対応 ASP.NET MVC 1.0

ASP.NET Web Form 3.5

•MVC開発のサポート

ASP.NET Web Form 4

ASP.NET MVC 2.0 •検証機能の強化など •jQuery の統合

ASP.NET MVC 3

•Razor の追加など

Web ゕプリの需要が 高まり、AJAX も実用へ

RESTful な URL Web 標準準拠のソースが

重視されやすくなる HTML5 対応への需要

クラウドへのデプロなど…

Page 58: Mvc conf session_1_osada

© 2011 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the

part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.