ぜい肉のないコントローラーをめざそう asp.net mvc

28
ぜい肉のないコントローラ をめざそう! ASP.NET MVC

Upload: miso-soup3

Post on 12-Apr-2017

5.728 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: ぜい肉のないコントローラーをめざそう ASP.NET MVC

ぜい肉のないコントローラ をめざそう!

ASP.NET MVC

Page 2: ぜい肉のないコントローラーをめざそう ASP.NET MVC

1.はじめに

目的 ぜい肉のない美しいコントローラを、めざそう!

ASP.NET MVC

・関心の分離を推進するフレームワーク。

・MVCを選択したからといって、その心にそったコードが生 まれるわけではない。 ・特にコントローラの部分は、開発者の手によって様々な姿にかわる。

Page 3: ぜい肉のないコントローラーをめざそう ASP.NET MVC

1.はじめに

対象者

MVCのチュートリアルを終え、1~2回アプリを作成した方

スピーカーについて

MVCを1年ちょっと。 TDD twitter : @miso_soup3 blog : はてな miso_soup3

Page 4: ぜい肉のないコントローラーをめざそう ASP.NET MVC

目次

1. はじめに

2. ぜい肉のないコントローラ の作り方 3つのダイエット方法

3. まとめ

Page 5: ぜい肉のないコントローラーをめざそう ASP.NET MVC

そもそもコントローラ(アクションメソッド)の仕事ってなあに?

2.ぜい肉のないコントローラの作り方

1. 送信された入力データをうけとる

2. タスクを実行する

3. レスポンス用のビューモデルを準備する

4. ビューを呼び出す

→ この4つがコントローラの主な役割

Page 6: ぜい肉のないコントローラーをめざそう ASP.NET MVC

これは避けたい・・・メタボなコントローラの例

2.ぜい肉のないコントローラの作り方

Page 7: ぜい肉のないコントローラーをめざそう ASP.NET MVC

ダイエット その1 モデルバインダー に任せる

2.ぜい肉のないコントローラの作り方

Page 8: ぜい肉のないコントローラーをめざそう ASP.NET MVC

方法1 モデルバインダー コントローラの1つめの仕事である、

「送信された入力データをうけとる」、 これをモデルバインダーにお任せする。

2.ぜい肉のないコントローラの作り方

Page 9: ぜい肉のないコントローラーをめざそう ASP.NET MVC

方法1 モデルバインダー

2.ぜい肉のないコントローラの作り方

Page 10: ぜい肉のないコントローラーをめざそう ASP.NET MVC

ダイエット その2 アクションフィルター ・セレクタ属性で フォロー

2.ぜい肉のないコントローラの作り方

Page 11: ぜい肉のないコントローラーをめざそう ASP.NET MVC

方法2 アクションフィルター・セレクタ属性

メソッドに共通することは、アクション・セレクタ属性 を作成し、メソッドから追い出そう、ということ。

2.ぜい肉のないコントローラの作り方

Page 12: ぜい肉のないコントローラーをめざそう ASP.NET MVC

[ AjaxOnly ]

2.ぜい肉のないコントローラの作り方

方法2 アクションフィルター・セレクタ属性

Page 13: ぜい肉のないコントローラーをめざそう ASP.NET MVC

[ AllowGetJson ]

2.ぜい肉のないコントローラの作り方

方法2 アクションフィルター・セレクタ属性

Page 14: ぜい肉のないコントローラーをめざそう ASP.NET MVC

[ AcceptParameter ] [ NotAcceptParameter]

2.ぜい肉のないコントローラの作り方

方法2 アクションフィルター・セレクタ属性

Page 15: ぜい肉のないコントローラーをめざそう ASP.NET MVC

[ AcceptParameter ] [ NotAcceptParameter]

2.ぜい肉のないコントローラの作り方

方法2 アクションフィルター・セレクタ属性

Page 16: ぜい肉のないコントローラーをめざそう ASP.NET MVC

2.ぜい肉のないコントローラの作り方

方法2 アクションフィルター・セレクタ属性

Page 17: ぜい肉のないコントローラーをめざそう ASP.NET MVC

OnActionExecuting

OnActionExecuted

OnResultExecuting

OnResultExecuted

メソッドから追い出そう

2.ぜい肉のないコントローラの作り方

方法2 アクションフィルター・セレクタ属性

Page 18: ぜい肉のないコントローラーをめざそう ASP.NET MVC

ダイエット その3 もう全部、 外部に委託しちゃう

2.ぜい肉のないコントローラの作り方

Page 19: ぜい肉のないコントローラーをめざそう ASP.NET MVC

Controller

方法3 タスクの実行を外部へ コントローラの仕事の1つである、

「タスクの実行」、 これを、他の人にお願いする。

Service...

Repository...

Handller...

2.ぜい肉のないコントローラの作り方

Page 20: ぜい肉のないコントローラーをめざそう ASP.NET MVC

気をつけたいこと

2点

方法3 タスクの実行を外部へ

Page 21: ぜい肉のないコントローラーをめざそう ASP.NET MVC

方法3 タスクの実行を外部へ 気をつけたいこと "依存性"

Controller

Service...

Service...

Handller...

2.ぜい肉のないコントローラの作り方

Page 22: ぜい肉のないコントローラーをめざそう ASP.NET MVC

方法3 タスクの実行を外部へ 気をつけたいこと "1つのメソッドからは1つの外部コンポーネントを利用する"

Controller アクションメソッド

Service...

Controller

Service...

Service...

Service...

Controller アクションメソッド

2.ぜい肉のないコントローラの作り方

Page 23: ぜい肉のないコントローラーをめざそう ASP.NET MVC

方法3 タスクの実行を外部へ どのように解決しているか? →サンプルを参考。 下の3つは、すべて違う方法で、コントローラの記述がされている。 (IoCフレームワーク:Unity, StructureMap, Autofac) ASP.NET Design Patterns - ASP.NET MVC 2 Case Study Starter Kit

http://aspnetdesignpatterns.codeplex.com/

Project Silk

http://silk.codeplex.com/

EFMVC - ASP.NET MVC 4, Entity Framework 4.3 Code First and Windows Azure

http://efmvc.codeplex.com/

2.ぜい肉のないコントローラの作り方

Page 24: ぜい肉のないコントローラーをめざそう ASP.NET MVC

まとめ

Page 25: ぜい肉のないコントローラーをめざそう ASP.NET MVC

モデルバインダーはここまで

→ 外部へ

共通する処理は、アクション・セレクタ属性へ

3.まとめ

Page 26: ぜい肉のないコントローラーをめざそう ASP.NET MVC

3.まとめ

Page 27: ぜい肉のないコントローラーをめざそう ASP.NET MVC

3.まとめ

ダイエット方法

1. モデルバインダー 2. 共通する処理は、アクション・セレクタ属性へ 3. 外部に委託

紹介した3つの方法だけで、 とても品質のよいコントローラ を記述できる。

大事なのは、美しさを追い求めるこころです!!

Page 28: ぜい肉のないコントローラーをめざそう ASP.NET MVC

ぜい肉のない美しいコントローラにした先には・・・ 読みやすい、変更しやすい、など、 心地よい開発体験がまっています。

ここからは、想像になりますが・・・・

コントローラを極めると、

コードが宣言的なものだけになり、

コントローラの単体テストがいらなくなるのではないか? もしくは、一発のコード自動生成で済むのではないか? と思います。 コントローラの記述については、まだまだ考える必要 があると思います。