SlideShare a Scribd company logo
MVVMパターン入門
               ~Windows8
             WinRTでの開発に
                向けて~
自己紹介

 卜部和敏(うらべかずとし)
 kattoshi(かっとし)

 facebook → https://www.facebook.com/kazutoshi.urabe
 http://urabes.jp

  マルチコンピューティング(株)
  石川県小松市
                           ごめんなさい、ほとんどP○○活動記録です。
                           今日は事業をブッチ!してこっち
                             来年は…内容が変わるハズ
デザインパターン

  過去のソフトウェア設計者が発見し編み出した設計ノウハウを蓄
  積し、
  名前をつけ、再利用しやすいように特定の規約に従ってカタログ
  化したものである


                                          エーリヒ・ガンマ
                                          リチャード・ヘルム
                                          ラルフ・ジョンソン
GoF(Gang of Four、4人組)がまとめたもの              ジョン・ブリシ
                                          ディース
   23個あります

      Factory Method,Singleton,Builder…
      Adapter,Composite…
      Command,Iterator,Observer…




                                                      1
アーキテクチャ・パターン(UIパターン)


   代用的なものとして…



 (1) フォーム・コントロール
 (2) モデル・ビユー・コントローラ(MVC)
 (3) モデル・ビユー・ビユーモデル(MVVM)



                     アーキテクチャ・パターンとは
                          宗教ですw




                                      2
(1) フォーム・コントロール




             依存                依存
   Control           Form             Data
                  (イベントハンドラ)




コードビハインドと呼ばれるソースファイル上に、ControlまたはDataを操作するコードを書く。

コードはイベントハンドラの中に記述するので、楽に書ける

コントロール(UI)が変わると、そのコントロールに合わせて、コードを描き直すことがある。
ある動作を反映する場所は、コントロールが増えると、増加する。




                                                    3
(2) MVC(Model-View-Controller)



    Controller(s)                           View(s)
                         View参照


                                 更新通知(要求)             Model参照



                             Model
       Model参照




    Webアプリケーションでの採用が多い
    Apache(PHP),ASP.NET(VB,C#),J2EE(Java)


                                                                4
(3) MVVM(Model-View-ViewModel)


                                   WinRT,WP7,WPF,Silverlight…(VB,C#,C++)


          View           View …        ユーザーと対話する独立性の高いレイヤー



 弱参照              変更通知


                                       ユーザー入力をModelに伝えるまたはModelから
     ViewModel           ViewModel …
                                       ユーザに出力するレイヤー



Model参照           変更通知
                         Model …       ドメインロジック(=ビジネスロジック)をもつ
                                       レイヤー。
          Model

                                                                           5
UnitTest            View
                                       ICommand:
                                         プラットフォームごとに異なる画面操作などの
                                         ロジック。XAMLだけで実現できない処理はコー
                                         Viewからの操作要求
 テスト               XAML
                                         ドビハインドを使用。ViewModelへの操作はイ
モジュール           コードビハインド
                                         ンターフェス経由で行う
                                       INotifyPropertyChanged
                                         値が変更された事をViewへ通知

                           DataBinding IDataErrorInfo
                                         ユーザー入力等のエラーの情報をViewへ通知
                                         入力項目または出力項目の定義
                                         Viewの動作に影響されないこと
                                       ICollectionView
                                         (WPF / Silverlight / WindowsPhone / WinRT で共通
                                         コレクションデータを表示するための操作要求
                                         に使用できるなど)
           ViewModel
                                       ナドナド




                                         データエンティティなどをプロパティで公開する
                                        INotifyPropertyChanged
                                          ビジネスロジック
                                         値が変更された事をViewへ通知

            Model                       など



                                                                                         6
オブジェクトインスタンスのイメージ
シーケンスのイメージ



View                              ViewModel

   View
    View
      View
                                ICommand
                                              Execute

                                 ViewModel
                                   ViewModel                       Model
  View         View                   ViewModel
                                                            プロパティ値変更


       INotifyPropertyChanged                                      Model
       イベント通知

   ViewModel
                                           INotifyPropertyChangedなどを
                                           利用したイベント通知



                                                                           7
実装は難しそう…

 どこから手を付けたらいいの
 かな?




色々フレームワークが
準備されています




                 8
MVVMフレームワーク

                                                   入門には最適
  ・PRISM
          http://compositewpf.codeplex.com/
  ・MVVM Light Toolkit
          http://mvvmlight.codeplex.com/
  ・Simple MVVM Light Toolkit
          http://simplemvvmtoolkit.codeplex.com/
  ・Catel
          http://catel.codeplex.com/
  ・Caliburn Micro
          http://caliburnmicro.codeplex.com/
  ・Livet
          http://ugaya40.net/livet




                                                            9
MVVMサイト(日本)

・えムナウBlog(えムナウさん)
http://blogs.wankuma.com/mnow/

・the sea of fertility(尾上さん)
http://ugaya40.net/


などなど




                                 10
ご清聴ありがとうございました




                 11

More Related Content

What's hot

ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう増田 亨
 
GUI アプリケーションにおける MVC
GUI アプリケーションにおける MVCGUI アプリケーションにおける MVC
GUI アプリケーションにおける MVCYu Nobuoka
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
私にとってのテスト
私にとってのテスト私にとってのテスト
私にとってのテストTakuto Wada
 
最近の単体テスト
最近の単体テスト最近の単体テスト
最近の単体テストKen Morishita
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -onozaty
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているKoichi Tanaka
 
20150530 めとべや東京 Reactive Property + Livetで作るWPFアプリ
20150530 めとべや東京 Reactive Property + Livetで作るWPFアプリ20150530 めとべや東京 Reactive Property + Livetで作るWPFアプリ
20150530 めとべや東京 Reactive Property + Livetで作るWPFアプリTakayoshi Tanaka
 
そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?takezoe
 
設計と実装で 抑えておきたい サービスクラスと例外
設計と実装で 抑えておきたい サービスクラスと例外設計と実装で 抑えておきたい サービスクラスと例外
設計と実装で 抑えておきたい サービスクラスと例外Takuya Sato
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話Koichiro Matsuoka
 
Riverpodでテストを書こう
Riverpodでテストを書こうRiverpodでテストを書こう
Riverpodでテストを書こうShinnosuke Tokuda
 
GraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ることGraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ることShingo Fukui
 
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)Mikiya Okuno
 
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ増田 亨
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)Yoshitaka Kawashima
 
REST API のコツ
REST API のコツREST API のコツ
REST API のコツpospome
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術Takuto Wada
 

What's hot (20)

ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
 
GUI アプリケーションにおける MVC
GUI アプリケーションにおける MVCGUI アプリケーションにおける MVC
GUI アプリケーションにおける MVC
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
私にとってのテスト
私にとってのテスト私にとってのテスト
私にとってのテスト
 
最近の単体テスト
最近の単体テスト最近の単体テスト
最近の単体テスト
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
 
20150530 めとべや東京 Reactive Property + Livetで作るWPFアプリ
20150530 めとべや東京 Reactive Property + Livetで作るWPFアプリ20150530 めとべや東京 Reactive Property + Livetで作るWPFアプリ
20150530 めとべや東京 Reactive Property + Livetで作るWPFアプリ
 
そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?
 
設計と実装で 抑えておきたい サービスクラスと例外
設計と実装で 抑えておきたい サービスクラスと例外設計と実装で 抑えておきたい サービスクラスと例外
設計と実装で 抑えておきたい サービスクラスと例外
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
Riverpodでテストを書こう
Riverpodでテストを書こうRiverpodでテストを書こう
Riverpodでテストを書こう
 
GraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ることGraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ること
 
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
 
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
 
REST API のコツ
REST API のコツREST API のコツ
REST API のコツ
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
 

Viewers also liked

Prism.Formsについて
Prism.FormsについてPrism.Formsについて
Prism.Formsについて一希 大田
 
塹壕よりLivetとMVVM
塹壕よりLivetとMVVM塹壕よりLivetとMVVM
塹壕よりLivetとMVVMHiroshi Maekawa
 
T90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvmT90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvm伸男 伊藤
 
リアクティブプログラミングとMVVMパターンについて
リアクティブプログラミングとMVVMパターンについてリアクティブプログラミングとMVVMパターンについて
リアクティブプログラミングとMVVMパターンについてHidenori Takeshita
 
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞いiOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞いKen Morishita
 
アーキテクチャ入門
アーキテクチャ入門アーキテクチャ入門
アーキテクチャ入門Susumu Yamazaki
 
データバインディング徹底攻略
データバインディング徹底攻略データバインディング徹底攻略
データバインディング徹底攻略Hiroyuki Mori
 
20150228 Realm超入門
20150228 Realm超入門20150228 Realm超入門
20150228 Realm超入門Kei Ito
 
Realmについて
RealmについてRealmについて
RealmについてYuki Asano
 
ユーザーを待たせないためにできること
ユーザーを待たせないためにできることユーザーを待たせないためにできること
ユーザーを待たせないためにできることTomoaki Imai
 
KnockoutJS勉強会 プロジェクトにmvvmを適用する狙い
KnockoutJS勉強会 プロジェクトにmvvmを適用する狙いKnockoutJS勉強会 プロジェクトにmvvmを適用する狙い
KnockoutJS勉強会 プロジェクトにmvvmを適用する狙いToshihiro Kawachi
 
【Potatotips #30】RxJavaを活用する3つのユースケース
【Potatotips #30】RxJavaを活用する3つのユースケース【Potatotips #30】RxJavaを活用する3つのユースケース
【Potatotips #30】RxJavaを活用する3つのユースケースHiroyuki Kusu
 
新版 OutOfMemoryErrorを知る
新版 OutOfMemoryErrorを知る新版 OutOfMemoryErrorを知る
新版 OutOfMemoryErrorを知るMasahiro Hidaka
 
GitHub halp app - Minimizing platform-specific code with MVVM - Justin Spahr-...
GitHub halp app - Minimizing platform-specific code with MVVM - Justin Spahr-...GitHub halp app - Minimizing platform-specific code with MVVM - Justin Spahr-...
GitHub halp app - Minimizing platform-specific code with MVVM - Justin Spahr-...Xamarin
 

Viewers also liked (20)

Prism.Formsについて
Prism.FormsについてPrism.Formsについて
Prism.Formsについて
 
塹壕よりLivetとMVVM
塹壕よりLivetとMVVM塹壕よりLivetとMVVM
塹壕よりLivetとMVVM
 
WPF MVVM Review
WPF MVVM ReviewWPF MVVM Review
WPF MVVM Review
 
T90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvmT90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvm
 
リアクティブプログラミングとMVVMパターンについて
リアクティブプログラミングとMVVMパターンについてリアクティブプログラミングとMVVMパターンについて
リアクティブプログラミングとMVVMパターンについて
 
WPF4.5入門
WPF4.5入門WPF4.5入門
WPF4.5入門
 
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞いiOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
 
アーキテクチャ入門
アーキテクチャ入門アーキテクチャ入門
アーキテクチャ入門
 
データバインディング徹底攻略
データバインディング徹底攻略データバインディング徹底攻略
データバインディング徹底攻略
 
WPFことはじめ
WPFことはじめWPFことはじめ
WPFことはじめ
 
20150228 Realm超入門
20150228 Realm超入門20150228 Realm超入門
20150228 Realm超入門
 
Realmについて
RealmについてRealmについて
Realmについて
 
Realmを使ってみた話
Realmを使ってみた話Realmを使ってみた話
Realmを使ってみた話
 
ユーザーを待たせないためにできること
ユーザーを待たせないためにできることユーザーを待たせないためにできること
ユーザーを待たせないためにできること
 
これからはじめる XAML - WPF プログラミング
これからはじめる XAML - WPF プログラミングこれからはじめる XAML - WPF プログラミング
これからはじめる XAML - WPF プログラミング
 
Rust-lang
Rust-langRust-lang
Rust-lang
 
KnockoutJS勉強会 プロジェクトにmvvmを適用する狙い
KnockoutJS勉強会 プロジェクトにmvvmを適用する狙いKnockoutJS勉強会 プロジェクトにmvvmを適用する狙い
KnockoutJS勉強会 プロジェクトにmvvmを適用する狙い
 
【Potatotips #30】RxJavaを活用する3つのユースケース
【Potatotips #30】RxJavaを活用する3つのユースケース【Potatotips #30】RxJavaを活用する3つのユースケース
【Potatotips #30】RxJavaを活用する3つのユースケース
 
新版 OutOfMemoryErrorを知る
新版 OutOfMemoryErrorを知る新版 OutOfMemoryErrorを知る
新版 OutOfMemoryErrorを知る
 
GitHub halp app - Minimizing platform-specific code with MVVM - Justin Spahr-...
GitHub halp app - Minimizing platform-specific code with MVVM - Justin Spahr-...GitHub halp app - Minimizing platform-specific code with MVVM - Justin Spahr-...
GitHub halp app - Minimizing platform-specific code with MVVM - Justin Spahr-...
 

Similar to MVVM入門

20130316 mix cpp-yuo
20130316 mix cpp-yuo20130316 mix cpp-yuo
20130316 mix cpp-yuoOKUBO_Yusuke
 
KnockoutJSを使用したアプリケーションの構築例
KnockoutJSを使用したアプリケーションの構築例KnockoutJSを使用したアプリケーションの構築例
KnockoutJSを使用したアプリケーションの構築例masakazusegawa
 
Xamarin.formsでのmvvm利用のコツ
Xamarin.formsでのmvvm利用のコツXamarin.formsでのmvvm利用のコツ
Xamarin.formsでのmvvm利用のコツMasuda Tomoaki
 
2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料OCHI Shuji
 
MAF2013 Enterprise Windows 8 – Architecture for rapid development of WinRT apps
MAF2013 Enterprise Windows 8 – Architecture for rapid development of WinRT appsMAF2013 Enterprise Windows 8 – Architecture for rapid development of WinRT apps
MAF2013 Enterprise Windows 8 – Architecture for rapid development of WinRT appsShotaro Suzuki
 
DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発Tomoharu ASAMI
 
ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~Yoshitaka Seo
 
iOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPracticeiOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPracticeKen Morishita
 
GUIのアーキテクチャ
GUIのアーキテクチャGUIのアーキテクチャ
GUIのアーキテクチャKentaro Inomata
 
RIAアーキテクチャー研究会 第3回 セッション4 Mvpvm pattern
RIAアーキテクチャー研究会 第3回 セッション4 Mvpvm patternRIAアーキテクチャー研究会 第3回 セッション4 Mvpvm pattern
RIAアーキテクチャー研究会 第3回 セッション4 Mvpvm patternMami Shiino
 
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発Akira Inoue
 
Djangoとは
DjangoとはDjangoとは
DjangoとはGomamatsu
 
Separate Model from Catalyst
Separate Model from CatalystSeparate Model from Catalyst
Separate Model from Catalysttechmemo
 
MvvmCross 入門
MvvmCross 入門MvvmCross 入門
MvvmCross 入門jz5 MATSUE
 
Java fx勉強会lt 第8回
Java fx勉強会lt 第8回Java fx勉強会lt 第8回
Java fx勉強会lt 第8回Taiji Miyabe
 
090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby CocoaTomoki Maeda
 
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発Daizen Ikehara
 
20140322 mvvm crossforwindowsstoreapps-pdf
20140322 mvvm crossforwindowsstoreapps-pdf20140322 mvvm crossforwindowsstoreapps-pdf
20140322 mvvm crossforwindowsstoreapps-pdfTakayoshi Tanaka
 
[公開用]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
 

Similar to MVVM入門 (20)

20130316 mix cpp-yuo
20130316 mix cpp-yuo20130316 mix cpp-yuo
20130316 mix cpp-yuo
 
KnockoutJSを使用したアプリケーションの構築例
KnockoutJSを使用したアプリケーションの構築例KnockoutJSを使用したアプリケーションの構築例
KnockoutJSを使用したアプリケーションの構築例
 
Xamarin.formsでのmvvm利用のコツ
Xamarin.formsでのmvvm利用のコツXamarin.formsでのmvvm利用のコツ
Xamarin.formsでのmvvm利用のコツ
 
2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料
 
MAF2013 Enterprise Windows 8 – Architecture for rapid development of WinRT apps
MAF2013 Enterprise Windows 8 – Architecture for rapid development of WinRT appsMAF2013 Enterprise Windows 8 – Architecture for rapid development of WinRT apps
MAF2013 Enterprise Windows 8 – Architecture for rapid development of WinRT apps
 
DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発
 
Mvpvm pattern
Mvpvm patternMvpvm pattern
Mvpvm pattern
 
ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~
 
iOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPracticeiOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPractice
 
GUIのアーキテクチャ
GUIのアーキテクチャGUIのアーキテクチャ
GUIのアーキテクチャ
 
RIAアーキテクチャー研究会 第3回 セッション4 Mvpvm pattern
RIAアーキテクチャー研究会 第3回 セッション4 Mvpvm patternRIAアーキテクチャー研究会 第3回 セッション4 Mvpvm pattern
RIAアーキテクチャー研究会 第3回 セッション4 Mvpvm pattern
 
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
 
Djangoとは
DjangoとはDjangoとは
Djangoとは
 
Separate Model from Catalyst
Separate Model from CatalystSeparate Model from Catalyst
Separate Model from Catalyst
 
MvvmCross 入門
MvvmCross 入門MvvmCross 入門
MvvmCross 入門
 
Java fx勉強会lt 第8回
Java fx勉強会lt 第8回Java fx勉強会lt 第8回
Java fx勉強会lt 第8回
 
090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa
 
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
 
20140322 mvvm crossforwindowsstoreapps-pdf
20140322 mvvm crossforwindowsstoreapps-pdf20140322 mvvm crossforwindowsstoreapps-pdf
20140322 mvvm crossforwindowsstoreapps-pdf
 
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
 

MVVM入門

  • 1. MVVMパターン入門 ~Windows8 WinRTでの開発に 向けて~
  • 2. 自己紹介 卜部和敏(うらべかずとし) kattoshi(かっとし) facebook → https://www.facebook.com/kazutoshi.urabe http://urabes.jp マルチコンピューティング(株) 石川県小松市 ごめんなさい、ほとんどP○○活動記録です。 今日は事業をブッチ!してこっち 来年は…内容が変わるハズ
  • 3. デザインパターン 過去のソフトウェア設計者が発見し編み出した設計ノウハウを蓄 積し、 名前をつけ、再利用しやすいように特定の規約に従ってカタログ 化したものである エーリヒ・ガンマ リチャード・ヘルム ラルフ・ジョンソン GoF(Gang of Four、4人組)がまとめたもの ジョン・ブリシ ディース 23個あります Factory Method,Singleton,Builder… Adapter,Composite… Command,Iterator,Observer… 1
  • 4. アーキテクチャ・パターン(UIパターン) 代用的なものとして… (1) フォーム・コントロール (2) モデル・ビユー・コントローラ(MVC) (3) モデル・ビユー・ビユーモデル(MVVM) アーキテクチャ・パターンとは 宗教ですw 2
  • 5. (1) フォーム・コントロール 依存 依存 Control Form Data (イベントハンドラ) コードビハインドと呼ばれるソースファイル上に、ControlまたはDataを操作するコードを書く。 コードはイベントハンドラの中に記述するので、楽に書ける コントロール(UI)が変わると、そのコントロールに合わせて、コードを描き直すことがある。 ある動作を反映する場所は、コントロールが増えると、増加する。 3
  • 6. (2) MVC(Model-View-Controller) Controller(s) View(s) View参照 更新通知(要求) Model参照 Model Model参照 Webアプリケーションでの採用が多い Apache(PHP),ASP.NET(VB,C#),J2EE(Java) 4
  • 7. (3) MVVM(Model-View-ViewModel) WinRT,WP7,WPF,Silverlight…(VB,C#,C++) View View … ユーザーと対話する独立性の高いレイヤー 弱参照 変更通知 ユーザー入力をModelに伝えるまたはModelから ViewModel ViewModel … ユーザに出力するレイヤー Model参照 変更通知 Model … ドメインロジック(=ビジネスロジック)をもつ レイヤー。 Model 5
  • 8. UnitTest View ICommand: プラットフォームごとに異なる画面操作などの ロジック。XAMLだけで実現できない処理はコー Viewからの操作要求 テスト XAML ドビハインドを使用。ViewModelへの操作はイ モジュール コードビハインド ンターフェス経由で行う INotifyPropertyChanged 値が変更された事をViewへ通知 DataBinding IDataErrorInfo ユーザー入力等のエラーの情報をViewへ通知 入力項目または出力項目の定義 Viewの動作に影響されないこと ICollectionView (WPF / Silverlight / WindowsPhone / WinRT で共通 コレクションデータを表示するための操作要求 に使用できるなど) ViewModel ナドナド データエンティティなどをプロパティで公開する INotifyPropertyChanged ビジネスロジック 値が変更された事をViewへ通知 Model など 6
  • 9. オブジェクトインスタンスのイメージ シーケンスのイメージ View ViewModel View View View ICommand Execute ViewModel ViewModel Model View View ViewModel プロパティ値変更 INotifyPropertyChanged Model イベント通知 ViewModel INotifyPropertyChangedなどを 利用したイベント通知 7
  • 11. MVVMフレームワーク 入門には最適 ・PRISM http://compositewpf.codeplex.com/ ・MVVM Light Toolkit http://mvvmlight.codeplex.com/ ・Simple MVVM Light Toolkit http://simplemvvmtoolkit.codeplex.com/ ・Catel http://catel.codeplex.com/ ・Caliburn Micro http://caliburnmicro.codeplex.com/ ・Livet http://ugaya40.net/livet 9