SlideShare une entreprise Scribd logo
1  sur  62
MVC アーキテクチャ論考
煮詰まる!
こんにちは。あもです。
amoO_O@Twitter
こんにちは。あもです。
職業 旅人amoO_O@Twitter
こんにちは。あもです。
職業 旅人副業 プログラマ
Python, PHP, CoffeeScript, JavaScript, Objective-C など
amoO_O@Twitter
こんにちは。あもです。
職業 旅人副業 プログラマ
Python, PHP, CoffeeScript, JavaScript, Objective-C など
amoO_O@Twitter
求職中(年明け〜)
Introduction
とある Web アプリケーション
クライアントサイド
Controller
ViewModel
とある Web アプリケーション
クライアントサイド
Controller
ViewModel
HTTP Request
とある Web アプリケーション
クライアントサイド
Controller
ViewModel
Model の更新
とある Web アプリケーション
クライアントサイド
Controller
ViewModel
更新後の Data
とある Web アプリケーション
クライアントサイド
Controller
ViewModel
View の生成
とある Web アプリケーション
クライアントサイド
Controller
ViewModel
生成されたView
とある Web アプリケーション
クライアントサイド
Controller
ViewModel
Http Response
クライアントサイド
Controller
ViewModel
よくある Web アプリケーションの MVC フレームワーク
…
クライアントサイド
Controller
ViewModel
これこそが理想的な MVC フレームワーク…
クライアントサイド
Controller
ViewModel
ではない。
クライアントサイド
Controller
ViewModel
かすってもいない。
クライアントサイド
Controller
ViewModel
MVC アーキテクチャに関する我々の誤解
・ このアーキテクチャは、MVC アーキテクチャにおいて説明される Model, View,
Controller という 3つの要素と
た ま た ま 同 じ 名 前 を 使 っ て し ま っ て い る
が、全く異なるアーキテクチャ・パターンである。
MVC アーキテクチャってなんぞ
本日のテーマ
MVC アーキテクチャのこころ
・ Trygve Reenskaugが考案し、SmallTalk-80 に実装されたアイデア
MVC アーキテクチャのこころ
・ Trygve Reenskaugが考案し、SmallTalk-80 に実装されたアイデア
・ Domain Objects … 現実世界に関する認識をモデリングしたもの(Model)
・ 次の 2 つを明確に分離すること(Separated Presentation):
・ Presentation Objects … ユーザーが実際に目にする GUI エレメント
Domain Objects
Presentation Objects
Separated Presentation Pattern
MVC アーキテクチャのこころ
・ Trygve Reenskaugが考案し、SmallTalk-80 に実装されたアイデア
・ Domain Objects … 現実世界に関する認識をモデリングしたもの(Model)
・ 次の 2 つを明確に分離すること(Separated Presentation):
・ Presentation Objects … ユーザーが実際に目にする GUI エレメント
・ MVC では、更に Presentation Object を次の 2 つの関心事に分離している:
・ Controller … Model を操作するための要素
・ View … Model を表示するための要素
Domain Objects Model
Presentation Objects
View
Controller
Separated Presentation Pattern MVC Pattarn
例:エアコン
ごっつ寒い
ブウォォォオオオ
オオオオオオオオ
■ 内部状態
・ モード:冷房
・ 温度:22℃
・ 湿度:40%
・ 風量:3
■ アクション
・ スイッチ I/O
・ モード変更
・ 温度上げる/下げる
・ 湿度上げる/下げる
・ 風量強める/弱める
システムの内部状態とアクションを Model と言う
エアコンモデル
22℃
Model を表示する機構を View と言う。
I/O
■ 内部状態
・ モード:冷房
・ 温度:22℃
・ 湿度:40%
・ 風量:3
■ アクション
・ スイッチ I/O
・ モード変更
・ 温度上げる/下げる
・ 湿度上げる/下げる
・ 風量強める/弱める
エアコンモデル
22℃
Model を更新する機構を Controller と言う
I/O
■ 内部状態
・ モード:冷房
・ 温度:22℃
・ 湿度:40%
・ 風量:3
■ アクション
・ スイッチ I/O
・ モード変更
・ 温度上げる/下げる
・ 湿度上げる/下げる
・ 風量強める/弱める
エアコンモデル
22℃
MVC アーキテクチャの3大要素
■ 内部状態
・ モード:冷房
・ 温度:22℃
・ 湿度:40%
・ 風量:3
■ アクション
・ スイッチ I/O
・ モード変更
・ 温度上げる/下げる
・ 湿度上げる/下げる
・ 風量強める/弱める
エアコンモデル
Controller
View
Model
User が Controller を使用する
22℃
エアコンモデル
■ 内部状態
・ モード:冷房
・ 温度:22℃
・ 湿度:40%
・ 風量:3
■ アクション
・ スイッチ I/O
・ モード変更
・ 温度上げる/下げる
・ 湿度上げる/下げる
・ 風量強める/弱める
Controller が Model のアクションを実行する
22℃
エアコンモデル
■ 内部状態
・ モード:冷房
・ 温度:22℃
・ 湿度:40%
・ 風量:3
■ アクション
・ スイッチ I/O
・ モード変更
・ 温度上げる/下げる
・ 湿度上げる/下げる
・ 風量強める/弱める
■ 内部状態
・ モード:冷房
・ 温度:22℃
・ 湿度:40%
・ 風量:3
■ アクション
・ スイッチ I/O
・ モード変更
・ 温度上げる/下げる
・ 湿度上げる/下げる
・ 風量強める/弱める
Model が 自身 を更新する
22℃
エアコンモデル
■ 内部状態
・ モード:冷房
・ 温度:26℃
・ 湿度:40%
・ 風量:3
■ アクション
・ スイッチ I/O
・ モード変更
・ 温度上げる/下げる
・ 湿度上げる/下げる
・ 風量強める/弱める
View が Model の更新を検知する
26℃
エアコンモデル
I/O
変化しない View もある
User が View を知覚する
26℃
エアコンモデル
■ 内部状態
・ モード:冷房
・ 温度:26℃
・ 湿度:40%
・ 風量:3
■ アクション
・ スイッチ I/O
・ モード変更
・ 温度上げる/下げる
・ 湿度上げる/下げる
・ 風量強める/弱める
この情報の流れが MVC アーキテクチャの「概念」
MVC-U アーキテクチャとも言う
忘れられがちだが
重要な役割
我々の誤解
MVCアーキテクチャに関する
我々の誤解:Web アプリを MVC アーキテクチャで構築…
我々の誤解:Web アプリを MVC アーキテクチャで構築…
我々の誤解:Web アプリを MVC アーキテクチャで構築…
…出来るの?
クライアントサイド サーバーサイド
User はクライアントサイドにいる
クライアントサイド サーバーサイド
User
Model はサーバーサイドにある
クライアントサイド サーバーサイド
User
Model
■ 内部状態
・ モード:冷房
・ 温度:22℃
・ 湿度:40%
・ 風量:3
■ アクション
・ スイッチ I/O
・ モード変更
・ 温度上げる/下げる
・ 湿度上げる/下げる
・ 風量強める/弱める
View は??
クライアントサイド サーバーサイド
User
Model
■ 内部状態
・ モード:冷房
・ 温度:22℃
・ 湿度:40%
・ 風量:3
■ アクション
・ スイッチ I/O
・ モード変更
・ 温度上げる/下げる
・ 湿度上げる/下げる
・ 風量強める/弱める
Controller は??
クライアントサイド サーバーサイド
User
Model
■ 内部状態
・ モード:冷房
・ 温度:22℃
・ 湿度:40%
・ 風量:3
■ アクション
・ スイッチ I/O
・ モード変更
・ 温度上げる/下げる
・ 湿度上げる/下げる
・ 風量強める/弱める
サーバーサイドにいる?
クライアントサイド サーバーサイド
User
Model
■ 内部状態
・ モード:冷房
・ 温度:22℃
・ 湿度:40%
・ 風量:3
■ アクション
・ スイッチ I/O
・ モード変更
・ 温度上げる/下げる
・ 湿度上げる/下げる
・ 風量強める/弱める
サーバーサイドにいる?
クライアントサイド サーバーサイド
User
Model
風来ねぇ
■ 内部状態
・ モード:冷房
・ 温度:22℃
・ 湿度:40%
・ 風量:3
■ アクション
・ スイッチ I/O
・ モード変更
・ 温度上げる/下げる
・ 湿度上げる/下げる
・ 風量強める/弱める
クライアントサイドにある?
クライアントサイド サーバーサイド
User
Model
■ 内部状態
・ モード:冷房
・ 温度:22℃
・ 湿度:40%
・ 風量:3
■ アクション
・ スイッチ I/O
・ モード変更
・ 温度上げる/下げる
・ 湿度上げる/下げる
・ 風量強める/弱める
クライアントサイドにある?
クライアントサイド サーバーサイド
User
ModelHTTP Request
■ 内部状態
・ モード:冷房
・ 温度:22℃
・ 湿度:40%
・ 風量:3
■ アクション
・ スイッチ I/O
・ モード変更
・ 温度上げる/下げる
・ 湿度上げる/下げる
・ 風量強める/弱める
クライアントサイドにある?
クライアントサイド サーバーサイド
User
ModelHTTP Response
■ 内部状態
・ モード:冷房
・ 温度:26℃
・ 湿度:40%
・ 風量:3
■ アクション
・ スイッチ I/O
・ モード変更
・ 温度上げる/下げる
・ 湿度上げる/下げる
・ 風量強める/弱める
User が1人ならいいけど…
クライアントサイド サーバーサイド
Users
Model
HTTP Response
不特定多数に知らせるには?
■ 内部状態
・ モード:冷房
・ 温度:26℃
・ 湿度:40%
・ 風量:3
■ アクション
・ スイッチ I/O
・ モード変更
・ 温度上げる/下げる
・ 湿度上げる/下げる
・ 風量強める/弱める
冒頭のこれ
クライアントサイド
Controller
ViewModel
実際にはこうなっているはず
クライアントサイド
ViewModel
Front Controller
Action Controller 1 Action Controller 2 …
Front Controller は Http Request を 誰が処理するか
を制御する
クライアントサイド
ViewModel
Front Controller
HTTP Request
Dispatch /
Routing
Action Controller 1 Action Controller 2 …
Action Controller は Model と View を制御する
クライアントサイド
ViewModel
Front Controller
Dispatch /
Routing
View の生成Model の更新
Action Controller 1 Action Controller 2 …
これを Front Controller Pattern と言う。
クライアントサイド
ViewModel
Front Controller
Action Controller 1 Action Controller 2 …
MVC と Front Controller では、Controller の意味する
ところが全く違う
クライアントサイド
ViewModel
Front Controller
Action
Controller 1
Action
Controller 2 …
MVC Front Controller
・ Controller は Model を制御する ・ Front Controller は HTTP Request
を誰が処理するかを制御する
・ Action Controller は Model と View
を制御する
たまたま同じ名前を使っているだけ
MVC アーキテクチャの使いドコロ
まずクラサバ間ではシステムが異なることを認識する
サーバーサイド
・ 入力として HTTP Request を受け取る
・ Model の更新を行う
・ 出力として HTTP Response という文字
列を返す
・ サーバーサイドはこの文字列がどのよう
に解釈されるかを関知しない
まずクラサバ間ではシステムが異なることを認識する
クライアントサイド
・ 入力として Controller が ユーザー操
作を受け取る
・ (クライアント側の)Model 更新を行う
・ 必要に応じて、通信を行い、サーバー
側の更新も行う
・ 出力として View が変更される(DOM
の変更、またはページ遷移)
サーバーサイド
・ 入力として HTTP Request を受け取る
・ Model の更新を行う
・ 出力として HTTP Response という文字
列を返す
・ サーバーサイドはこの文字列がどのよう
に解釈されるかを関知しない
・ HTTP Response を解釈し、レンダリ
ングする
まずクラサバ間ではシステムが異なることを認識する
クライアントサイド
・ 入力として Controller が ユーザー操
作を受け取る
・ (クライアント側の)Model 更新を行う
・ 必要に応じて、通信を行い、サーバー
側の更新も行う
・ 出力として View が変更される(DOM
の変更、またはページ遷移)
サーバーサイド
・ 入力として HTTP Request を受け取る
・ Model の更新を行う
・ 出力として HTTP Response という文字
列を返す
・ サーバーサイドはこの文字列がどのよう
に解釈されるかを関知しない
・ HTTP Response を解釈し、レンダリ
ングする
クライアントサイド内だけなら MVC が使える
サーバーサイドは
Front Controller が有用
MVC の使いドコロ
・ Web アプリケーションのクライアントサイド
・ iOS/Android アプリ
・ デスクトップアプリケーション
Controller
View
まとめ
まとめ
・ システムの内部状態とその操作窓口を Model と言う
・ Model を表示する機構を View と言う
・ Model を操作する機構を Controller と言う
・ サーバーサイド向けに提供されている MVC フレーム
ワークは実は Front Controller Pattern の実装
・ クライアントサイドやスマホのネイティブアプリには
MVC は有用
http://www.ac-illust.com/main/profile.php?id=DwDjQTBB
イラスト:麦さま

Contenu connexe

Similaire à Mvc

130329 04
130329 04130329 04
130329 04openrtm
 
20130329 rtm4
20130329 rtm420130329 rtm4
20130329 rtm4openrtm
 
GUI アプリケーションにおける MVC
GUI アプリケーションにおける MVCGUI アプリケーションにおける MVC
GUI アプリケーションにおける MVCYu Nobuoka
 
EC-CUBEプラグイン講義
EC-CUBEプラグイン講義EC-CUBEプラグイン講義
EC-CUBEプラグイン講義ria1201
 
TableViewAgent
TableViewAgentTableViewAgent
TableViewAgentAkura Pi
 
Rails and twitter #twtr_hack
Rails and twitter #twtr_hackRails and twitter #twtr_hack
Rails and twitter #twtr_hacki7a
 
はじめての ASP.NET MVC
はじめての ASP.NET MVCはじめての ASP.NET MVC
はじめての ASP.NET MVCjz5 MATSUE
 
MVCになぞらえて理解するReact
MVCになぞらえて理解するReactMVCになぞらえて理解するReact
MVCになぞらえて理解するReactiPride Co., Ltd.
 
Windows storeアプリ brekky
Windows storeアプリ brekkyWindows storeアプリ brekky
Windows storeアプリ brekkySatoshi Sekine
 
ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~Yoshitaka Seo
 

Similaire à Mvc (13)

130329 04
130329 04130329 04
130329 04
 
20130329 rtm4
20130329 rtm420130329 rtm4
20130329 rtm4
 
GUI アプリケーションにおける MVC
GUI アプリケーションにおける MVCGUI アプリケーションにおける MVC
GUI アプリケーションにおける MVC
 
ASP.NET MVC 1.0
ASP.NET MVC 1.0ASP.NET MVC 1.0
ASP.NET MVC 1.0
 
EC-CUBEプラグイン講義
EC-CUBEプラグイン講義EC-CUBEプラグイン講義
EC-CUBEプラグイン講義
 
TableViewAgent
TableViewAgentTableViewAgent
TableViewAgent
 
Rails and twitter #twtr_hack
Rails and twitter #twtr_hackRails and twitter #twtr_hack
Rails and twitter #twtr_hack
 
UnicastWS vol.2
UnicastWS vol.2UnicastWS vol.2
UnicastWS vol.2
 
はじめての ASP.NET MVC
はじめての ASP.NET MVCはじめての ASP.NET MVC
はじめての ASP.NET MVC
 
MVCになぞらえて理解するReact
MVCになぞらえて理解するReactMVCになぞらえて理解するReact
MVCになぞらえて理解するReact
 
Windows storeアプリ brekky
Windows storeアプリ brekkyWindows storeアプリ brekky
Windows storeアプリ brekky
 
ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~
 
G0042 h
G0042 hG0042 h
G0042 h
 

Dernier

自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 

Dernier (8)

自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 

Mvc