SlideShare uma empresa Scribd logo
1 de 13
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

Mais conteúdo relacionado

Mais procurados

DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかKoichiro Matsuoka
 
Prism + ReactiveProperty入門
Prism + ReactiveProperty入門Prism + ReactiveProperty入門
Prism + ReactiveProperty入門一希 大田
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意Yoshitaka Kawashima
 
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」U-dai Yokoyama
 
ブラック企業から学ぶMVCモデル
ブラック企業から学ぶMVCモデルブラック企業から学ぶMVCモデル
ブラック企業から学ぶMVCモデルYuta Hiroto
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方増田 亨
 
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話Daichi Koike
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話Koichiro Matsuoka
 
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう増田 亨
 
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことBIGLOBE Inc.
 
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くかDDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くかKoichiro Matsuoka
 
ドメイン駆動設計入門
ドメイン駆動設計入門ドメイン駆動設計入門
ドメイン駆動設計入門Takuya Kitamura
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところY Watanabe
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)Yoshitaka Kawashima
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろうKota Mizushima
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説増田 亨
 
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1  ドメイン駆動設計の基本を理解する3週連続DDDその1  ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する増田 亨
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)NTT DATA Technology & Innovation
 
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計増田 亨
 

Mais procurados (20)

DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
 
Prism + ReactiveProperty入門
Prism + ReactiveProperty入門Prism + ReactiveProperty入門
Prism + ReactiveProperty入門
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
 
ブラック企業から学ぶMVCモデル
ブラック企業から学ぶMVCモデルブラック企業から学ぶMVCモデル
ブラック企業から学ぶMVCモデル
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
WPF MVVM Review
WPF MVVM ReviewWPF MVVM Review
WPF MVVM Review
 
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
 
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
 
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くかDDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
 
ドメイン駆動設計入門
ドメイン駆動設計入門ドメイン駆動設計入門
ドメイン駆動設計入門
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
 
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1  ドメイン駆動設計の基本を理解する3週連続DDDその1  ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
 
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
 

Destaque

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
 

Destaque (20)

Prism.Formsについて
Prism.FormsについてPrism.Formsについて
Prism.Formsについて
 
塹壕よりLivetとMVVM
塹壕よりLivetとMVVM塹壕よりLivetとMVVM
塹壕よりLivetとMVVM
 
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-...
 
Rust 超入門
Rust 超入門Rust 超入門
Rust 超入門
 

Semelhante a 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
 
GUI アプリケーションにおける MVC
GUI アプリケーションにおける MVCGUI アプリケーションにおける MVC
GUI アプリケーションにおける MVCYu Nobuoka
 
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
 

Semelhante a 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利用のコツ
 
GUI アプリケーションにおける MVC
GUI アプリケーションにおける MVCGUI アプリケーションにおける MVC
GUI アプリケーションにおける MVC
 
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
 

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