SlideShare uma empresa Scribd logo
1 de 12
Baixar para ler offline
GUI アプリケーションにおける
       MVC



      id:nobuoka
        (@nobuoka)

    2012-12-13 Kyoto.js #3
自己紹介と概要
●   id:nobuoka - はてなブックマークチーム
●   Java, JavaScript, Ruby あたりの言語が好き
●   仕事では Perl と JavaScript

●   今日は GUI アプリケーションの MVC の基礎的な話
●   MVC についてはよく見かけるが微妙な説明が多い気が
    する
    –私自身間違ってるかも
●   基本に立ち返って単純な MVC を考えてみる
●   オセロ的なゲームを例に
MVC とは?
●   Web サービスのサーバーサイドの設計の説明に使われ
    ているのをよくみる
    –しかし MVC ってホントにサーバーサイドの設計に向い
     てるのかなーって思う; 無理やり感高い気がする
●   そもそもは Smalltalk での GUI アプリケーション開発が
    発祥 (?)
●   GUI アプリケーションにおける 「データの処理」 と 「表示
    処理」 と 「ユーザー入力の処理」 を分けるという設計
    –   Model : データの管理・処理
    –   View : 表示の処理
    –   Controller : ユーザー入力に応じて Model や View
        (やその他オブジェクト) にメッセージを飛ばす
Model
●   データそのものの管理や変更処理を担当する
    –データの整合性を保証する (ビジネスロジックの内包)
●   多くの場合、Observer パターンにより登録された View
    に対して、データの変更を通知するようになっている
●   インターフェイス :
    –   データの設定や取り出しのためのメソッド
    –   通知先の View を登録するためのメソッド
View
●   表示処理を担当する
●   基本的には Model オブジェクトに結び付けられる
    – Model から値を取り出して使う
    – Model 側に変更があると通知を受けて表示を更新
●   ユーザーからの入力を Observer パターンによって別の
    オブジェクトに通知
●   インターフェイス :
    –   Model からの通知を受け取るためのメソッド
    –   通知先の Controller を登録するためのメソッド
    –   必要に応じて Controller からの操作を受け取るメソッ
        ド
View と Model
●   Model は抽象表現で View は具象表現
●   分離することのメリット :
    –   1 つの抽象表現に対して複数の具象表現を実現しや
        すい
         ● 例) 表形式のデータに対して、表とグラフを表示


    –   Model を GUI アプリケーション以外でも利用できる

            変更通知     V

                   データ参照
            M
Controller
●   ユーザーからの入力 (やその他からの入力) を受け取り、
    それに応じた変更をするように Model に伝える
●   ユーザーからの入力として、View での UI イベントを受け
    取ることが多い
    –   だが、View が Controller を知っている必要はない
    –   ここも Observer パターン
MVC の全体像

                  実際のアプリケーションは
                  もっと複雑になるが、最小
         V        構成の MVC だとこんな感じ

             イベント通知
変更通知
       データ参照
                      C
   M    データ参照・操作
オセロ的なゲームにおける Model
●   オセロ的なゲームにおいては以下のデータを管理 (外か
    ら参照できる)
    – ボード上の石の配置の状態
    – 現在先攻か後攻かという情報
●   以下の操作を受け付ける
    – ボード上の指定の位置に石を置く
●   以下のイベントが発生したときに Observer (view) に通
    知
    –   ボード上の石の配置が変わった
    –   先攻・後攻のターンが変わった
オセロ的なゲームにおける View
●   ボードの状態を表示する view と先攻・後攻を表示する
    view
●   HTML 要素 / SVG 要素を生成したりするのはこいつが
    担当する
●   ボードの状態は、Model からボード上の石の配置を読ん
    で、そのとおりに要素を生成して表示
●   View は自分が結び付けられている Model を知ってい
    て、石の配置が変わったときや先攻・後攻が変わったとき
    に通知を受け取る
オセロ的なゲームにおける Controller
●   ボードを表す view がクリックされたとき、クリックされた升
    目に石を置くように model にメッセージを送る
オセロ的なゲームのデモ
●   動くもの :
    http://www.vividcode.info/sample/2012/othello_like_game/main.html

●   ソースコード :
    https://github.com/nobuoka/presentation/tree/20121213-kyotojs-3/master

Mais conteúdo relacionado

Mais procurados

オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ増田 亨
 
塹壕よりLivetとMVVM
塹壕よりLivetとMVVM塹壕よりLivetとMVVM
塹壕よりLivetとMVVMHiroshi Maekawa
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
MvcのFatモデルに立ち向かう
MvcのFatモデルに立ち向かうMvcのFatモデルに立ち向かう
MvcのFatモデルに立ち向かうShun Hikita
 
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 FallYoshitaka Kawashima
 
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースモジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースHajime Yanagawa
 
データベース設計徹底指南
データベース設計徹底指南データベース設計徹底指南
データベース設計徹底指南Mikiya Okuno
 
Msを16倍出し抜くwpf開発2回目
Msを16倍出し抜くwpf開発2回目Msを16倍出し抜くwpf開発2回目
Msを16倍出し抜くwpf開発2回目cct-inc
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!Genya Murakami
 
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計Tadayoshi Sato
 
いまさら恥ずかしくてAsyncをawaitした
いまさら恥ずかしくてAsyncをawaitしたいまさら恥ずかしくてAsyncをawaitした
いまさら恥ずかしくてAsyncをawaitしたKouji Matsui
 
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったことドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと増田 亨
 
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐりKazuyuki TAKASE
 
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発慎一 古賀
 
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニックinfinite_loop
 
serviceクラスをやめようサブクラスを使おう
serviceクラスをやめようサブクラスを使おうserviceクラスをやめようサブクラスを使おう
serviceクラスをやめようサブクラスを使おうよしだ あつし
 
できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミングPreferred Networks
 
C#や.NET Frameworkがやっていること
C#や.NET FrameworkがやっていることC#や.NET Frameworkがやっていること
C#や.NET Frameworkがやっていること信之 岩永
 
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようCognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようShuto Suzuki
 

Mais procurados (20)

オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
 
塹壕よりLivetとMVVM
塹壕よりLivetとMVVM塹壕よりLivetとMVVM
塹壕よりLivetとMVVM
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
MvcのFatモデルに立ち向かう
MvcのFatモデルに立ち向かうMvcのFatモデルに立ち向かう
MvcのFatモデルに立ち向かう
 
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
 
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースモジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェース
 
データベース設計徹底指南
データベース設計徹底指南データベース設計徹底指南
データベース設計徹底指南
 
Msを16倍出し抜くwpf開発2回目
Msを16倍出し抜くwpf開発2回目Msを16倍出し抜くwpf開発2回目
Msを16倍出し抜くwpf開発2回目
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
 
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計
 
iOSでMVVM入門
iOSでMVVM入門iOSでMVVM入門
iOSでMVVM入門
 
いまさら恥ずかしくてAsyncをawaitした
いまさら恥ずかしくてAsyncをawaitしたいまさら恥ずかしくてAsyncをawaitした
いまさら恥ずかしくてAsyncをawaitした
 
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったことドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
 
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり
 
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
 
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
 
serviceクラスをやめようサブクラスを使おう
serviceクラスをやめようサブクラスを使おうserviceクラスをやめようサブクラスを使おう
serviceクラスをやめようサブクラスを使おう
 
できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミング
 
C#や.NET Frameworkがやっていること
C#や.NET FrameworkがやっていることC#や.NET Frameworkがやっていること
C#や.NET Frameworkがやっていること
 
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようCognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しよう
 

Destaque

ゲームエンジンとMVC
ゲームエンジンとMVCゲームエンジンとMVC
ゲームエンジンとMVCAimingStudy
 
ゲーム開発とデザインパターン
ゲーム開発とデザインパターンゲーム開発とデザインパターン
ゲーム開発とデザインパターンTakashi Komada
 
Validações no Ruby on Rails
Validações no Ruby on Rails Validações no Ruby on Rails
Validações no Ruby on Rails Eduardo Mendes
 
Halo2 におけるHFSM(階層型有限状態マシン) 【ビヘイビアツリー解説】
Halo2 におけるHFSM(階層型有限状態マシン)  【ビヘイビアツリー解説】Halo2 におけるHFSM(階層型有限状態マシン)  【ビヘイビアツリー解説】
Halo2 におけるHFSM(階層型有限状態マシン) 【ビヘイビアツリー解説】Youichiro Miyake
 
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例Yoshifumi Kawai
 
PyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミングPyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミングRansui Iso
 
ドメイン駆動設計入門
ドメイン駆動設計入門ドメイン駆動設計入門
ドメイン駆動設計入門Takuya Kitamura
 
patterns & practices "Project Silk" に見る HTML5 とモダンブラウザのための Web 開発の今後
patterns & practices "Project Silk" に見る HTML5 とモダンブラウザのための Web 開発の今後patterns & practices "Project Silk" に見る HTML5 とモダンブラウザのための Web 開発の今後
patterns & practices "Project Silk" に見る HTML5 とモダンブラウザのための Web 開発の今後Akira Inoue
 
メタプログラミング C#
メタプログラミング C#メタプログラミング C#
メタプログラミング C#Fujio Kojima
 
ASP.NET MVC プログラミング入門の入門
ASP.NET MVC プログラミング入門の入門ASP.NET MVC プログラミング入門の入門
ASP.NET MVC プログラミング入門の入門Masuda Tomoaki
 
ソフトウェア構成管理入門
ソフトウェア構成管理入門ソフトウェア構成管理入門
ソフトウェア構成管理入門智治 長沢
 
Component basedgameenginedesign
Component basedgameenginedesign Component basedgameenginedesign
Component basedgameenginedesign DADA246
 
UniRxでMV(R)Pパターン をやってみた
UniRxでMV(R)PパターンをやってみたUniRxでMV(R)Pパターンをやってみた
UniRxでMV(R)Pパターン をやってみたtorisoup
 
C#でもメタプログラミングがしたい!!
C#でもメタプログラミングがしたい!!C#でもメタプログラミングがしたい!!
C#でもメタプログラミングがしたい!!TATSUYA HAYAMIZU
 
ゲームオブジェクトの管理
ゲームオブジェクトの管理ゲームオブジェクトの管理
ゲームオブジェクトの管理Shota Homma
 
Biglobe×ddd 実践編(dev love 20150618)
Biglobe×ddd 実践編(dev love 20150618)Biglobe×ddd 実践編(dev love 20150618)
Biglobe×ddd 実践編(dev love 20150618)Hidekazu Nishi
 

Destaque (20)

ゲームエンジンとMVC
ゲームエンジンとMVCゲームエンジンとMVC
ゲームエンジンとMVC
 
ゲーム開発とデザインパターン
ゲーム開発とデザインパターンゲーム開発とデザインパターン
ゲーム開発とデザインパターン
 
MVC 01
MVC 01MVC 01
MVC 01
 
Validações no Ruby on Rails
Validações no Ruby on Rails Validações no Ruby on Rails
Validações no Ruby on Rails
 
MVC 02
MVC 02MVC 02
MVC 02
 
MVC 03
MVC 03MVC 03
MVC 03
 
Halo2 におけるHFSM(階層型有限状態マシン) 【ビヘイビアツリー解説】
Halo2 におけるHFSM(階層型有限状態マシン)  【ビヘイビアツリー解説】Halo2 におけるHFSM(階層型有限状態マシン)  【ビヘイビアツリー解説】
Halo2 におけるHFSM(階層型有限状態マシン) 【ビヘイビアツリー解説】
 
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
 
PyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミングPyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミング
 
ドメイン駆動設計入門
ドメイン駆動設計入門ドメイン駆動設計入門
ドメイン駆動設計入門
 
発表資料
発表資料発表資料
発表資料
 
patterns & practices "Project Silk" に見る HTML5 とモダンブラウザのための Web 開発の今後
patterns & practices "Project Silk" に見る HTML5 とモダンブラウザのための Web 開発の今後patterns & practices "Project Silk" に見る HTML5 とモダンブラウザのための Web 開発の今後
patterns & practices "Project Silk" に見る HTML5 とモダンブラウザのための Web 開発の今後
 
メタプログラミング C#
メタプログラミング C#メタプログラミング C#
メタプログラミング C#
 
ASP.NET MVC プログラミング入門の入門
ASP.NET MVC プログラミング入門の入門ASP.NET MVC プログラミング入門の入門
ASP.NET MVC プログラミング入門の入門
 
ソフトウェア構成管理入門
ソフトウェア構成管理入門ソフトウェア構成管理入門
ソフトウェア構成管理入門
 
Component basedgameenginedesign
Component basedgameenginedesign Component basedgameenginedesign
Component basedgameenginedesign
 
UniRxでMV(R)Pパターン をやってみた
UniRxでMV(R)PパターンをやってみたUniRxでMV(R)Pパターンをやってみた
UniRxでMV(R)Pパターン をやってみた
 
C#でもメタプログラミングがしたい!!
C#でもメタプログラミングがしたい!!C#でもメタプログラミングがしたい!!
C#でもメタプログラミングがしたい!!
 
ゲームオブジェクトの管理
ゲームオブジェクトの管理ゲームオブジェクトの管理
ゲームオブジェクトの管理
 
Biglobe×ddd 実践編(dev love 20150618)
Biglobe×ddd 実践編(dev love 20150618)Biglobe×ddd 実践編(dev love 20150618)
Biglobe×ddd 実践編(dev love 20150618)
 

Semelhante a GUI アプリケーションにおける MVC

20130316 mix cpp-yuo
20130316 mix cpp-yuo20130316 mix cpp-yuo
20130316 mix cpp-yuoOKUBO_Yusuke
 
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~normalian
 
RIAアーキテクチャー研究会 第3回 セッション4 Mvpvm pattern
RIAアーキテクチャー研究会 第3回 セッション4 Mvpvm patternRIAアーキテクチャー研究会 第3回 セッション4 Mvpvm pattern
RIAアーキテクチャー研究会 第3回 セッション4 Mvpvm patternMami Shiino
 
MvvmCross 入門
MvvmCross 入門MvvmCross 入門
MvvmCross 入門jz5 MATSUE
 
はじめての ASP.NET MVC
はじめての ASP.NET MVCはじめての ASP.NET MVC
はじめての ASP.NET MVCjz5 MATSUE
 
Asp Net Mvc 基礎のキソ
Asp Net Mvc 基礎のキソAsp Net Mvc 基礎のキソ
Asp Net Mvc 基礎のキソYoshitaka Seo
 
MVCのつぎは・・・
MVCのつぎは・・・MVCのつぎは・・・
MVCのつぎは・・・Net Penguin
 
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介david9142
 
T35 ASP.NET MVCを使ったTDD入門
T35 ASP.NET MVCを使ったTDD入門T35 ASP.NET MVCを使ったTDD入門
T35 ASP.NET MVCを使ったTDD入門normalian
 
2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料OCHI Shuji
 
いまさら学ぶMVVMパターン
いまさら学ぶMVVMパターンいまさら学ぶMVVMパターン
いまさら学ぶMVVMパターンYuta Matsumura
 
VSUGDAY2012 - ASP.NET MVC 4 Deveoper Preview による モバイルWEBアプリケーション開発
VSUGDAY2012 - ASP.NET MVC 4 Deveoper Preview による モバイルWEBアプリケーション開発VSUGDAY2012 - ASP.NET MVC 4 Deveoper Preview による モバイルWEBアプリケーション開発
VSUGDAY2012 - ASP.NET MVC 4 Deveoper Preview による モバイルWEBアプリケーション開発tomotoshi
 
【17-C-2】 クラウド上でのエンタープライズアプリケーション開発
【17-C-2】 クラウド上でのエンタープライズアプリケーション開発【17-C-2】 クラウド上でのエンタープライズアプリケーション開発
【17-C-2】 クラウド上でのエンタープライズアプリケーション開発lalha
 
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発Akira Inoue
 

Semelhante a GUI アプリケーションにおける MVC (20)

20130316 mix cpp-yuo
20130316 mix cpp-yuo20130316 mix cpp-yuo
20130316 mix cpp-yuo
 
MVVM入門
MVVM入門MVVM入門
MVVM入門
 
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
 
Mvpvm pattern
Mvpvm patternMvpvm pattern
Mvpvm pattern
 
RIAアーキテクチャー研究会 第3回 セッション4 Mvpvm pattern
RIAアーキテクチャー研究会 第3回 セッション4 Mvpvm patternRIAアーキテクチャー研究会 第3回 セッション4 Mvpvm pattern
RIAアーキテクチャー研究会 第3回 セッション4 Mvpvm pattern
 
MvvmCross 入門
MvvmCross 入門MvvmCross 入門
MvvmCross 入門
 
はじめての ASP.NET MVC
はじめての ASP.NET MVCはじめての ASP.NET MVC
はじめての ASP.NET MVC
 
Asp Net Mvc 基礎のキソ
Asp Net Mvc 基礎のキソAsp Net Mvc 基礎のキソ
Asp Net Mvc 基礎のキソ
 
MVCもやもや話
MVCもやもや話MVCもやもや話
MVCもやもや話
 
MVCのつぎは・・・
MVCのつぎは・・・MVCのつぎは・・・
MVCのつぎは・・・
 
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
 
Mvc conf session_5_isami
Mvc conf session_5_isamiMvc conf session_5_isami
Mvc conf session_5_isami
 
T35 ASP.NET MVCを使ったTDD入門
T35 ASP.NET MVCを使ったTDD入門T35 ASP.NET MVCを使ったTDD入門
T35 ASP.NET MVCを使ったTDD入門
 
2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料
 
Slide
SlideSlide
Slide
 
いまさら学ぶMVVMパターン
いまさら学ぶMVVMパターンいまさら学ぶMVVMパターン
いまさら学ぶMVVMパターン
 
VSUGDAY2012 - ASP.NET MVC 4 Deveoper Preview による モバイルWEBアプリケーション開発
VSUGDAY2012 - ASP.NET MVC 4 Deveoper Preview による モバイルWEBアプリケーション開発VSUGDAY2012 - ASP.NET MVC 4 Deveoper Preview による モバイルWEBアプリケーション開発
VSUGDAY2012 - ASP.NET MVC 4 Deveoper Preview による モバイルWEBアプリケーション開発
 
【17-C-2】 クラウド上でのエンタープライズアプリケーション開発
【17-C-2】 クラウド上でのエンタープライズアプリケーション開発【17-C-2】 クラウド上でのエンタープライズアプリケーション開発
【17-C-2】 クラウド上でのエンタープライズアプリケーション開発
 
Angularreflex20141210
Angularreflex20141210Angularreflex20141210
Angularreflex20141210
 
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
 

Mais de Yu Nobuoka

5 年続く 「はてなブックマーク」 アプリを継続開発する技術
5 年続く 「はてなブックマーク」 アプリを継続開発する技術5 年続く 「はてなブックマーク」 アプリを継続開発する技術
5 年続く 「はてなブックマーク」 アプリを継続開発する技術Yu Nobuoka
 
Android アプリを Jenkins でビルドして GitHub に “リリース” を作る
Android アプリを Jenkins でビルドして GitHub に “リリース” を作るAndroid アプリを Jenkins でビルドして GitHub に “リリース” を作る
Android アプリを Jenkins でビルドして GitHub に “リリース” を作るYu Nobuoka
 
AndroidJUnitRunner で JUnit 4 形式のテストに移行
AndroidJUnitRunner で JUnit 4 形式のテストに移行AndroidJUnitRunner で JUnit 4 形式のテストに移行
AndroidJUnitRunner で JUnit 4 形式のテストに移行Yu Nobuoka
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入Yu Nobuoka
 
Android アプリ開発における Gradle ビルドシステム
Android アプリ開発における Gradle ビルドシステムAndroid アプリ開発における Gradle ビルドシステム
Android アプリ開発における Gradle ビルドシステムYu Nobuoka
 
Java による Web アプリケーションのプロトタイプのために最近使っている構成
Java による Web アプリケーションのプロトタイプのために最近使っている構成Java による Web アプリケーションのプロトタイプのために最近使っている構成
Java による Web アプリケーションのプロトタイプのために最近使っている構成Yu Nobuoka
 
はてなにおける Android アプリのソフトウェアテスト
はてなにおける Android アプリのソフトウェアテストはてなにおける Android アプリのソフトウェアテスト
はてなにおける Android アプリのソフトウェアテストYu Nobuoka
 
GIF と LZW 圧縮と GifWriter.js
GIF と LZW 圧縮と GifWriter.jsGIF と LZW 圧縮と GifWriter.js
GIF と LZW 圧縮と GifWriter.jsYu Nobuoka
 
Windows ストアアプリのつくりかた (JS + HTML + CSS)
Windows ストアアプリのつくりかた (JS + HTML + CSS)Windows ストアアプリのつくりかた (JS + HTML + CSS)
Windows ストアアプリのつくりかた (JS + HTML + CSS)Yu Nobuoka
 
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめTypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめYu Nobuoka
 
WebSocket Protocol と Plack::Middleware::WebSocket
WebSocket Protocol と Plack::Middleware::WebSocketWebSocket Protocol と Plack::Middleware::WebSocket
WebSocket Protocol と Plack::Middleware::WebSocketYu Nobuoka
 

Mais de Yu Nobuoka (11)

5 年続く 「はてなブックマーク」 アプリを継続開発する技術
5 年続く 「はてなブックマーク」 アプリを継続開発する技術5 年続く 「はてなブックマーク」 アプリを継続開発する技術
5 年続く 「はてなブックマーク」 アプリを継続開発する技術
 
Android アプリを Jenkins でビルドして GitHub に “リリース” を作る
Android アプリを Jenkins でビルドして GitHub に “リリース” を作るAndroid アプリを Jenkins でビルドして GitHub に “リリース” を作る
Android アプリを Jenkins でビルドして GitHub に “リリース” を作る
 
AndroidJUnitRunner で JUnit 4 形式のテストに移行
AndroidJUnitRunner で JUnit 4 形式のテストに移行AndroidJUnitRunner で JUnit 4 形式のテストに移行
AndroidJUnitRunner で JUnit 4 形式のテストに移行
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
Android アプリ開発における Gradle ビルドシステム
Android アプリ開発における Gradle ビルドシステムAndroid アプリ開発における Gradle ビルドシステム
Android アプリ開発における Gradle ビルドシステム
 
Java による Web アプリケーションのプロトタイプのために最近使っている構成
Java による Web アプリケーションのプロトタイプのために最近使っている構成Java による Web アプリケーションのプロトタイプのために最近使っている構成
Java による Web アプリケーションのプロトタイプのために最近使っている構成
 
はてなにおける Android アプリのソフトウェアテスト
はてなにおける Android アプリのソフトウェアテストはてなにおける Android アプリのソフトウェアテスト
はてなにおける Android アプリのソフトウェアテスト
 
GIF と LZW 圧縮と GifWriter.js
GIF と LZW 圧縮と GifWriter.jsGIF と LZW 圧縮と GifWriter.js
GIF と LZW 圧縮と GifWriter.js
 
Windows ストアアプリのつくりかた (JS + HTML + CSS)
Windows ストアアプリのつくりかた (JS + HTML + CSS)Windows ストアアプリのつくりかた (JS + HTML + CSS)
Windows ストアアプリのつくりかた (JS + HTML + CSS)
 
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめTypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめ
 
WebSocket Protocol と Plack::Middleware::WebSocket
WebSocket Protocol と Plack::Middleware::WebSocketWebSocket Protocol と Plack::Middleware::WebSocket
WebSocket Protocol と Plack::Middleware::WebSocket
 

GUI アプリケーションにおける MVC

  • 1. GUI アプリケーションにおける MVC id:nobuoka (@nobuoka) 2012-12-13 Kyoto.js #3
  • 2. 自己紹介と概要 ● id:nobuoka - はてなブックマークチーム ● Java, JavaScript, Ruby あたりの言語が好き ● 仕事では Perl と JavaScript ● 今日は GUI アプリケーションの MVC の基礎的な話 ● MVC についてはよく見かけるが微妙な説明が多い気が する –私自身間違ってるかも ● 基本に立ち返って単純な MVC を考えてみる ● オセロ的なゲームを例に
  • 3. MVC とは? ● Web サービスのサーバーサイドの設計の説明に使われ ているのをよくみる –しかし MVC ってホントにサーバーサイドの設計に向い てるのかなーって思う; 無理やり感高い気がする ● そもそもは Smalltalk での GUI アプリケーション開発が 発祥 (?) ● GUI アプリケーションにおける 「データの処理」 と 「表示 処理」 と 「ユーザー入力の処理」 を分けるという設計 – Model : データの管理・処理 – View : 表示の処理 – Controller : ユーザー入力に応じて Model や View (やその他オブジェクト) にメッセージを飛ばす
  • 4. Model ● データそのものの管理や変更処理を担当する –データの整合性を保証する (ビジネスロジックの内包) ● 多くの場合、Observer パターンにより登録された View に対して、データの変更を通知するようになっている ● インターフェイス : – データの設定や取り出しのためのメソッド – 通知先の View を登録するためのメソッド
  • 5. View ● 表示処理を担当する ● 基本的には Model オブジェクトに結び付けられる – Model から値を取り出して使う – Model 側に変更があると通知を受けて表示を更新 ● ユーザーからの入力を Observer パターンによって別の オブジェクトに通知 ● インターフェイス : – Model からの通知を受け取るためのメソッド – 通知先の Controller を登録するためのメソッド – 必要に応じて Controller からの操作を受け取るメソッ ド
  • 6. View と Model ● Model は抽象表現で View は具象表現 ● 分離することのメリット : – 1 つの抽象表現に対して複数の具象表現を実現しや すい ● 例) 表形式のデータに対して、表とグラフを表示 – Model を GUI アプリケーション以外でも利用できる 変更通知 V データ参照 M
  • 7. Controller ● ユーザーからの入力 (やその他からの入力) を受け取り、 それに応じた変更をするように Model に伝える ● ユーザーからの入力として、View での UI イベントを受け 取ることが多い – だが、View が Controller を知っている必要はない – ここも Observer パターン
  • 8. MVC の全体像 実際のアプリケーションは もっと複雑になるが、最小 V 構成の MVC だとこんな感じ イベント通知 変更通知 データ参照 C M データ参照・操作
  • 9. オセロ的なゲームにおける Model ● オセロ的なゲームにおいては以下のデータを管理 (外か ら参照できる) – ボード上の石の配置の状態 – 現在先攻か後攻かという情報 ● 以下の操作を受け付ける – ボード上の指定の位置に石を置く ● 以下のイベントが発生したときに Observer (view) に通 知 – ボード上の石の配置が変わった – 先攻・後攻のターンが変わった
  • 10. オセロ的なゲームにおける View ● ボードの状態を表示する view と先攻・後攻を表示する view ● HTML 要素 / SVG 要素を生成したりするのはこいつが 担当する ● ボードの状態は、Model からボード上の石の配置を読ん で、そのとおりに要素を生成して表示 ● View は自分が結び付けられている Model を知ってい て、石の配置が変わったときや先攻・後攻が変わったとき に通知を受け取る
  • 11. オセロ的なゲームにおける Controller ● ボードを表す view がクリックされたとき、クリックされた升 目に石を置くように model にメッセージを送る
  • 12. オセロ的なゲームのデモ ● 動くもの : http://www.vividcode.info/sample/2012/othello_like_game/main.html ● ソースコード : https://github.com/nobuoka/presentation/tree/20121213-kyotojs-3/master