Upload
normalian
View
2.567
Download
0
Embed Size (px)
DESCRIPTION
わんくま東京勉強会#35で使用したセッション資料。ASP.NET MVCの活用法が載ってます。
Citation preview
わんくま同盟 東京勉強会 #35
by
ASP.NET MVC を使った TDD 入門~ SI 屋さんと WEB 屋さんとの違い~
http://twitter.com/normlianhttp://d.hatena.co.jp/waritohutsuhttp://www.pixiv.net/member.php?id=147209
わんくま同盟 東京勉強会 #35
自己紹介
• HN : 割と普通• 本拠地 : 横浜近辺• 肩書き : コードをあまり書けない SI
屋• 趣味 : コードを書く&絵を描く• その他 : InfoQ の翻訳者もどき
わんくま同盟 東京勉強会 #35
今日の流れ
• ASP.NET MVC って何者?• ASP.NET MVC 誰がいつ使う?• ASP.NET MVC をいじってみよう!• ASP.NET MVC による TDD 開発
わんくま同盟 東京勉強会 #35
ASP .NET MVC って何者?
• WEB アプリ開発用のフレームワーク• Codeplex でソースコードを公開中
.NET Framework
ASP.NET
WebFormASP.NET
MVCASP.NET
Ajax
わんくま同盟 東京勉強会 #35
ASP .NET MVC って何者? (1/2)
• ASP .NET で M ・ V ・ C のモデルを構築• Model• View• Controller
Controller
Model
View
モデルの呼び出し
View がモデルを参照
Webブラウザ
わんくま同盟 東京勉強会 #35
ASP .NET MVC って何者? (2/2)
• 認証機能• フィルタ機能
•時間があったらおまけで話します• キャッシュ機能•単体テストの容易性
今日の発表はここメインで♪今日の発表はここメインで♪
わんくま同盟 東京勉強会 #35
なんで ASP .NET MVC つくったん? (1/3)
•ASP.NET自体のコンセプトは・・?
従来のクラサバシステム開発者が、 WEB 開発にそのまま移行できる開発フレームワークを提供していた
デスクトップアプリの開発手法デスクトップアプリの開発手法・・ WndProcWndProc 、、 WM_XXXWM_XXX 、、イベントドリブン・・・イベントドリブン・・・
WEBWEB アプリの開発アプリの開発 GETGET 、、 POSTPOST 、、 formform ・・・、・・・、セッションセッション
わんくま同盟 東京勉強会 #35
なんで ASP .NET MVC つくったん? (2/3)
• でも、それはそれで色々と問題が・・・
・ ・ ViewStateViewState の埋め込み何とかして・・・の埋め込み何とかして・・・ orzorz
・ コードビハインドは良いけど、・ コードビハインドは良いけど、 ユニットテスト化しにくいよ・・・ ユニットテスト化しにくいよ・・・ orzorz
・ ・ JavascriptJavascript 、、 csscss の自動生成されて、他の部品の自動生成されて、他の部品 とコンフリクトしますが何か? とコンフリクトしますが何か?
わんくま同盟 東京勉強会 #35
なんで ASP .NET MVC つくったん? (3/3)
• 純粋な WEB 開発用フレームワークの台頭• Ruby on Rails (Ruby)• Django (Python)• Cake (PHP)
• 同じ型付言語の Java でも色々と・・・• JSF 、 Struts 、 Spring 、 Wicket
TDD 、 WEB 開発に特化
従来のクラサバ開発者だけでなく、WEB開発者も取り込んでみようかのー・・・かな?
わんくま同盟 東京勉強会 #35
今日の流れ
• ASP.NET MVC って何者?• ASP.NET MVC 誰がいつ使う?oWEB 屋さんと SI 屋さんの違いoWebForm と MVC の住み分け
• ASP.NET MVC をいじってみよう!• ASP.NET MVC で TDD 開発
わんくま同盟 東京勉強会 #35
ASP .NET MVC 誰がいつ使う?
• 主な対象はいわゆる WEB 屋さん• 気にするのは開発効率の向上、カスタマイズの容易性とか
• 設計メインな SI 屋さんではない• 気にするのがコンポーネント化、標準化とか
• TDD開発、 Agile開発等で強さを発揮しそう
※ 逆にウォーターフォールとかだと厳しそう
わんくま同盟 東京勉強会 #35
SI 屋さんと WEB 屋さんの違いってなにさ?( 1/2 )
• SI 屋さんo 業務知識優先o 古き良きウォーターフォールベースo イントラ多し、典型的な CRUD アプリやら帳票やらo 特定ユーザがターゲット ( 特定の法人内とか )
• WEB 屋さんo サービス企画、柔軟で高速な開発 ( ドキュメントは後
から )o アジャイルが割かし多い筈じゃない?o URL やら XHTML やら、デザインが超重要o ユーザが不特定多数多し ( インターネット上 )
いわゆるインターネットの“あちら側”と“こちら側”いわゆるインターネットの“あちら側”と“こちら側”
わんくま同盟 東京勉強会 #35
SI 屋さんと WEB 屋さんの違いってなにさ?( 2/2 )
WEBWEB 屋 屋 (( 開発者開発者 )) さんさんが主に住んでそうな世界が主に住んでそうな世界
基本設計
開発
連結テスト
総合テスト概要設計
ソースチェック
詳細設計 単体テスト
要件・仕様・予算等を伝える
テスト項目の納品
WEB 屋さんと SI 屋さんで気にするポイントが結構違う
SISI 屋屋 (( 設計者設計者 )) さんが主に住んでそうな世界さんが主に住んでそうな世界
わんくま同盟 東京勉強会 #35
WebForm と MVC のすみわけ• SI 屋さんの様なタイプ ( コンポーネント指向 )
o 設計と開発との切り離しが容易o 典型的な CRUDアプリとかならコーディングレス
でもOKo基本設計とテスト項目の整合性チェックとかが楽o コンポーネントを用いた開発標準化が行いやすい
• WEB 屋さん的なタイプ ( リソース指向 )o Agile開発、 TDD 開発向き。o Ajax なんかとの連携しやすいし、デザインにこり
やすいoポストバック、 VIEWSTATE 埋め込み、 CSS 生成はつ
らいo URL ルーティングとか良い感じ
oURL名もデザインできるよ
WebFormWebForm 向き!!向き!!
MVCMVC 向き!!向き!!
わんくま同盟 東京勉強会 #35
今日の流れ
• ASP.NET MVC って何者?• ASP.NET MVC 誰がいつ使う?• ASP.NET MVC いじってみよう!oModeloViewoController
• ASP.NET MVC を使った TDD 開発MVC を実際に
使って機能を確認
わんくま同盟 東京勉強会 #35
ASP.NET MVC を使ってみる ~概要 1/2 ~• URL ルーティングされ、実行される Controller がマッピングoURLマッピングからコントローラ&アクションを引き出す
o リフレクションを使ってアクションを実行ルーティングクラルーティングクラスを使ってマッピスを使ってマッピ
ングング
わんくま同盟 東京勉強会 #35
ASP.NET MVC を使ってみる ~概要 2/2 ~
• Controller が実行され、画面にデータをマッピングo 以下は System.Web.Mvc.MvcHandlerSystem.Web.Mvc.MvcHandler
Controller Controller 作成作成
Controller Controller 実行実行
わんくま同盟 東京勉強会 #35
ASP.NET MVC 使ってみる ~ Controller 1/2 ~• System.Web.Mvc.Controller で定義• デフォルトでは、 DefaultControllerFactory 辺りから
Controller が抜き出される• Controller のアクションを実行された際
に、 ActionResultクラスを返す
ControllerActionInvoker.cs 辺りを見ると Controllerがどうやって実行されてるかわかるよん
困ったら困ったら Controller.csController.cs クラスを眺めてみよう!クラスを眺めてみよう!
わんくま同盟 東京勉強会 #35
ASP.NET MVC 使ってみる ~ Controller 2/2~
• Controller 辺りに余計な拡張をしようと思ったら・・• IControllerFactory を実装したクラスに置き換える
といい感じ (現状では DefaultControllerFactory 辺りを継承したクラスでいじると良いかも )
ControllerController に対して、に対して、 DIDI コンテナでインジェクションとかコンテナでインジェクションとか
わんくま同盟 東京勉強会 #35
ASP.NET MVC を使ってみる ~ Model 1/2~
• System.Web.Mvc.IModelBinder を使ったりできるよ!o バインド用の独自インターフェースを使って
Bindingo アクション実行の段階ではすでにモデルにバイン
ディングされてる (ControllerActionInvoker 内でバインド ) !
ViewModelViewModel クラスクラス
BinderBinder クラスクラス
わんくま同盟 東京勉強会 #35
ASP.NET MVC を使ってみる ~ Model 2/2~
• Controller#UpdateModel メソッドを使うのも全然有りo Controller 内で明示的にバインディングするo FormCollection と Models なクラスに対するマッピ
ングをリフレクション使ってやってくれる
「プロパティ名 「プロパティ名 == == collection[“namecollection[“name属性”属性” ]] 」の値をマッピング」の値をマッピング
わんくま同盟 東京勉強会 #35
ASP.NET MVC を使ってみる ~ View 1/2 ~• Controller戻り値 ActionResult の中で、 ViewResult
が *.aspx のレンダーに対応してる
ViewView の検索の検索
ViewView でレンダリングでレンダリング
ViewEngineCollectionViewEngineCollectionからから ViewView を検索を検索
わんくま同盟 東京勉強会 #35
ASP.NET MVC を使ってみる ~ View 2/2 ~• IViewEngine の標準実装として用意されているのは
WebFormViewEngine• ~/Views仮想パス下から {controller}/{action}.aspx と
かを探して、その WebFormView を作成
わんくま同盟 東京勉強会 #35
今日の流れ
• ASP.NET MVC って何者?• ASP.NET MVC は誰がいつ使うのか?• ASP.NET MVC をいじってみよう!• ASP.NET MVC を使った TDD 開発
わんくま同盟 東京勉強会 #35
ASP.NET MVC 上での TDD 開発 (1/2)
• 開発サーバを起動することなくテスト可能
• ActionResult の Model 、 ViewData に対してチェックを行う
基本的に基本的に ControllerController のの引数・戻り値がテスト対引数・戻り値がテスト対
象象
わんくま同盟 東京勉強会 #35
ASP.NET MVC 上での TDD 開発 (2/2)
• 単体テスト効率化の“コツ”
IRepository*.aspx
Controller
MainRepository( 本番用 )
MockRepository( テスト用 )
ViewData[“key”]ViewData[“key”]ViewData.ModelViewData.Model
画面の表示データに対してチェック
する RepositoryRepositoryパターパターンンを使ってモック
化実際にデモをしてみます!実際にデモをしてみます!
わんくま同盟 東京勉強会 #35
おまけ その1 Filter 開発
• Controller実行時に適用されるフィルタ
※※IIExceptionFilterExceptionFilter ##OnException()OnException()
1.1. IAuthorizationFilter#OnAuthorization()IAuthorizationFilter#OnAuthorization()
2.2. IActionFilter#OnActionExecuting()IActionFilter#OnActionExecuting()
3.3. コントローラのアクション実行コントローラのアクション実行
4.4. IActionFilter#OnActionExecuted()IActionFilter#OnActionExecuted()
5.5. IResultFilter#OnResultExecuting()IResultFilter#OnResultExecuting()
6.6. ActionResult#ExecuteResult()ActionResult#ExecuteResult()
7. IResultFilter#OnResultExecuted()
例外が発生
わんくま同盟 東京勉強会 #35
おまけ その2 HtmlHelper の拡張
• *.aspx を作成する際に用いるヘルパークラス
やり過ぎるとやり過ぎると WebFormWebForm と区別がと区別が付かなくなったりするので程々に付かなくなったりするので程々に
わんくま同盟 東京勉強会 #35
まとめ
• 純 WEB 屋さんなら MVC が良い感じ• 元々がデスクトップアプリ開発者なら、無理
に変えなくても良いかも
• 拡張性が非常に高いのは素晴らしいよね• CodePlex に行くと、ソースコードが落とせま
すよ• Futureパッケージ系は楽しそう (非同期実行
とか )