SlideShare une entreprise Scribd logo
1  sur  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

Contenu connexe

Tendances

Tendances (20)

今さらWPF? いいえ、今こそWPF!
今さらWPF?いいえ、今こそWPF!今さらWPF?いいえ、今こそWPF!
今さらWPF? いいえ、今こそWPF!
 
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
 
WPFの画面をWebブラウザのように拡大・縮小に追従させる方法(オートスクロールバー付き)
WPFの画面をWebブラウザのように拡大・縮小に追従させる方法(オートスクロールバー付き)WPFの画面をWebブラウザのように拡大・縮小に追従させる方法(オートスクロールバー付き)
WPFの画面をWebブラウザのように拡大・縮小に追従させる方法(オートスクロールバー付き)
 
MVC の Model を考える
MVC の Model を考えるMVC の Model を考える
MVC の Model を考える
 
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはがんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
 
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
 
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめトランザクションスクリプトのすすめ
トランザクションスクリプトのすすめ
 
未来(あす)Xamlの1msに泣かないために
未来(あす)Xamlの1msに泣かないために未来(あす)Xamlの1msに泣かないために
未来(あす)Xamlの1msに泣かないために
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
 
CloudFormation/SAMのススメ
CloudFormation/SAMのススメCloudFormation/SAMのススメ
CloudFormation/SAMのススメ
 
20160526 依存関係逆転の原則
20160526 依存関係逆転の原則20160526 依存関係逆転の原則
20160526 依存関係逆転の原則
 
あの日見たMVCを僕たちはまだ知らない for RoR
あの日見たMVCを僕たちはまだ知らない for RoRあの日見たMVCを僕たちはまだ知らない for RoR
あの日見たMVCを僕たちはまだ知らない for RoR
 
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
 
Observableで非同期処理
Observableで非同期処理Observableで非同期処理
Observableで非同期処理
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
 
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門
 

En vedette

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
 

En vedette (20)

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

Similaire à 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
 

Similaire à 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