SlideShare a Scribd company logo
1 of 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

More Related Content

What's hot

20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
 

What's hot (20)

「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
 
WPF開発での陥りやすい罠
WPF開発での陥りやすい罠WPF開発での陥りやすい罠
WPF開発での陥りやすい罠
 
動的なILの生成と編集
動的なILの生成と編集動的なILの生成と編集
動的なILの生成と編集
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
 
ドメイン駆動設計再入門
ドメイン駆動設計再入門ドメイン駆動設計再入門
ドメイン駆動設計再入門
 
MVC の Model を考える
MVC の Model を考えるMVC の Model を考える
MVC の Model を考える
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
Mavenの真実とウソ
Mavenの真実とウソMavenの真実とウソ
Mavenの真実とウソ
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
 
あの日見たMVCを僕たちはまだ知らない for RoR
あの日見たMVCを僕たちはまだ知らない for RoRあの日見たMVCを僕たちはまだ知らない for RoR
あの日見たMVCを僕たちはまだ知らない for RoR
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
CloudFront経由でのCORS利用
CloudFront経由でのCORS利用CloudFront経由でのCORS利用
CloudFront経由でのCORS利用
 
WPF MVVM Review
WPF MVVM ReviewWPF MVVM Review
WPF MVVM Review
 
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装までドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
 
塹壕よりLivetとMVVM
塹壕よりLivetとMVVM塹壕よりLivetとMVVM
塹壕よりLivetとMVVM
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
 

Viewers also liked

T90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvmT90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvm
伸男 伊藤
 
データバインディング徹底攻略
データバインディング徹底攻略データバインディング徹底攻略
データバインディング徹底攻略
Hiroyuki Mori
 
Rust-lang
Rust-langRust-lang
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
 
Prism for windows runtime入門
Prism for windows runtime入門Prism for windows runtime入門
Prism for windows runtime入門
一希 大田
 

Viewers also liked (20)

Prism.Formsについて
Prism.FormsについてPrism.Formsについて
Prism.Formsについて
 
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 超入門
 
Prism for windows runtime入門
Prism for windows runtime入門Prism for windows runtime入門
Prism for windows runtime入門
 

Similar to MVVM入門

20130316 mix cpp-yuo
20130316 mix cpp-yuo20130316 mix cpp-yuo
20130316 mix cpp-yuo
OKUBO_Yusuke
 
DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発
Tomoharu ASAMI
 
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 Cocoa
Tomoki Maeda
 
20140322 mvvm crossforwindowsstoreapps-pdf
20140322 mvvm crossforwindowsstoreapps-pdf20140322 mvvm crossforwindowsstoreapps-pdf
20140322 mvvm crossforwindowsstoreapps-pdf
Takayoshi Tanaka
 

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利用のコツ
 
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