SlideShare a Scribd company logo
MVPVMパターン

えムナウ (児玉宏之)
http://mnow.jp/
http://mnow.wankuma.com/
http://blogs.wankuma.com/mnow/
http://www.ailight.jp/blog/mnow/
アジェンダ

•   はじめに
•   MVPVM 設計パターン
•   ナビゲーション
•   プレゼンター
•   まとめ
はじめに

• MSDN マガジン2011年12月号で発表された
  「MVPVM 設計パターン」ですが、私もViewと
  ViewMode​lの両方を知っていて現状の画面
  状態を管理する何者かが​必要なことは感じて
  いました。
• Applicationの派生クラスやApplicat​ionが操
  作するオブジェクトとして現状の画面状態を管​
  理やナビゲーションをする機能をつくっていま
  した。今回のセッションでは私なりに研究した
  「MVPVM 設計パターン」をお届けします。
MVPVM 設計パターン

• モデル - ビュー - プレゼンター - ビューモデル
  (MVPVM: Model-View-Presenter-
  ViewModel) パターンは、 Microsoft patterns
  & practices の Prism プロジェクトで導入され
  ました。
• MVVM の能力と機能をすべて利用でき、
  MVPの拡張性からプレゼンテーションロジック
  の複雑さにも対応でき、ViewModel は本来あ
  るべきプロパティ公開とコマンドの受付になり
  ます。
MVPVM 設計パターン

• MVPVMパターン
 – それではMVPVMパターンとはなんでしょうか?
 – MVVMパターン と MVPパターンを合体させたも
   のです。
 – MVVMパターン と MVPパターンを見てみましょう。
MVPVM 設計パターン

• MVVMパターン
 – View:ユーザーインターフェースの外観や配置や
   反応(インタラクション)を定義する
 – ViewModel:Viewの必要な情報をプロパティで公
   開しユーザー入力やコマンドを処理する
 – Model:データの取得や管理を行いプログラムの
   処理の中核となる
MVPVM 設計パターン

• MVVMパターン


    View                             Model



                   コマンド
データバイ
ンド


                   ViewModel
           プロパティ               データ取得・更新
MVPVM 設計パターン

• MVPパターン
 – View:ユーザーインターフェースの外観や配置や
   反応(インタラクション)を定義する
 – Presenter:Viewのナビゲーションを管理しユー
   ザー入力をModelに伝える
 – Model:データの取得や管理を行いプログラムの
   処理の中核となる
MVPVM 設計パターン

• MVPパターン


   View                          Model



               入力




               Presenter
     ナビゲーション               データ取得・更新
MVPVM 設計パターン

• MVPVMパターン
 – View:ユーザーインターフェースの外観や配置や
   反応(インタラクション)を定義する
 – ViewModel:Viewの必要な情報をプロパティで公
   開しユーザー入力やコマンドをPresenterに渡す
 – Presenter:ViewやのViewModelのナビゲーショ
   ンを管理しユーザー入力をModelに伝える
 – Model:データの取得や管理を行いプログラムの
   処理の中核となる
MVPVM 設計パターン

• MVPVMパターン

                                 Presenter
                    ナビゲーション
    View                                 データ取得・更新


             コマンド
データバイ                           データ更新依頼
ンド


                    ViewModel
           プロパティ                             Model
ナビゲーション

• ナビゲーション
 – MVVMパターンではどこがナビゲーションを担当
   していたのでしょうか?
 – 答えの一つはメッセージ+ビヘイビアーです。
 – ビヘイビアーはViewの分類になります。
 – 「ViewModel から View を操作する」ということ葉
   を聞いたことがある人もいるでしょう。
 – 操作というのはメッセージを送ってメッセージボッ
   クスやダイアログを表示したりすることも多かった
   のです。
ナビゲーション
  • メッセージボックス
public class DialogMessageBehavior : Behavior<DependencyObject>
  {
     protected override void OnAttached()
     {
        base.OnAttached();
        Messenger.Default.Register<DialogMessage>(AssociatedObject, p => Invoke(p));
     }
     protected override void OnDetaching()
     {
        base.OnDetaching();
        Messenger.Default.Unregister<DialogMessage>(AssociatedObject);
     }
     private void Invoke(object parameter)
     {
        DialogMessage message = parameter as DialogMessage;
         MessageBoxResult result = MessageBox.Show(message.Content, message.Caption,
message.Button, message.Icon, message.DefaultResult, message.Options);
         message.ProcessCallback(result);
      }
  }
ナビゲーション
  • ダイアログ
public class DialogMessageBehavior : Behavior<Wndow>
  {
     protected override void OnAttached()
     {
        base.OnAttached();
        Messenger.Default.Register<DialogMessage>(AssociatedObject, p => Invoke(p));
     }
     protected override void OnDetaching()
     {
        base.OnDetaching();
        Messenger.Default.Unregister<DialogMessage>(AssociatedObject);
     }
     private void Invoke(object parameter)
     {
        DialogMessage message = parameter as DialogMessage;
         AssociatedObject.DataContext = message.ViewModel;
         bool? result = AssociatedObject.ShowDialog();
         message.ProcessCallback(result);
      }
  }
ナビゲーション

• ナビゲーション
  – MVVMパターンでは他にどこがナビゲーションを
    担当していたのでしょうか?
  – 答えの一つはViewModel+DataTemplateです。
<DataTemplate DataType="{x:Type c:GreekGodViewModel}">
   <TextBlock Text="{Binding Path=Name}" Foreground="Gold"/>
</DataTemplate>


  – さらに DataTemplate をデータによって切り替え
    る DataTemplateSelector というのもあります。
  – DataTemplate はViewの分類になります。
ナビゲーション

 • DataTemplateSelector
public class TaskListDataTemplateSelector : DataTemplateSelector
{
  public override DataTemplate
         SelectTemplate(object item, DependencyObject container)
  {
     FrameworkElement element = container as FrameworkElement;
     if (element != null && item != null && item is TaskViewModel)
     {
         var taskitem = item as TaskViewModel;
         if (taskitem.Priority == 1)
             return element.FindResource("importantTaskTemplate") as DataTemplate;
         else
             return element.FindResource("myTaskTemplate") as DataTemplate;
     }
     return null;
  }
}
ナビゲーション

• MVVMパターンは、View と ViewModel は疎
  結合でお互いに交換可能であるということが
  利点の一つであるといわれていました。
• どうして今見てきたような密結合が生まれてし
  まったのでしょうか?
• ナビゲーションは View と ViewModel の両方
  を知らないとできません、この場合 View に仕
  込んでますので ViewModel や 本来
  ViewModel にあるべきデータが View に出
  てきてしまいます。
ナビゲーション

• ナビゲーション
 – MVVMパターンではViewだけがナビゲーションを
   担当していたのでしょうか?
 – 答えの一つはアプリケーションクラスです。
 – アプリケーションクラスはMVVMパターンの範囲
   外です。
 – 範囲外であれば別に問題ないのでしょうか?
 – ナビゲーションを担当する Presenter があればア
   プリケーションクラスはすっきりするはずです。
ナビゲーション
• アプリケーションクラス
protected override void OnStartup(StartupEventArgs e)
     {
        var win = new Views.TwitterWindow();
        this.MainWindow = win;
        var account = LoadAccount();
        if (account == null)
            account = NewAccountWithDialog();
        if (account != null)
            SaveAccount(account);
        else
        {
            MessageBox.Show("認証失敗");
            return;
        }
        var vm = new ViewModel.TwitterViewModel(
                    ConsumerKey, ConsumerSecret, account.Token);
        win.DataContext = vm;
        win.Show();
        base.OnStartup(e);
     }
プレゼンター

• プレゼンターの役割
 – View と ViewModel のインスタンス作成を行いま
   す。
 – View をパネルなどのコンテナに追加し、
   DataContext に ViewModel をセットします。
 – Model に表示すべきデータを要求し ViewModel
   にセットします。
 – 上位の Presenter や ViewModel の依頼により
   更新すべきデータを収集し Model を更新します。
 – View と ViewModel のインスタンス解放を行いま
   す。
プレゼンター

• プレゼンターの構成
 – Presenter はパネルなどのコンテナで複数の
   Presenter を管理する Presenter と、ユーザーコ
   ントロールやダイアログなどの単一ビューを管理
   するPresenter があります。
 – View や ViewModel が階層構造になっているよ
   うに Presenter も階層構造になります。
プレゼンター

• プレゼンターの利点
 – Application や ViewModel からプレゼンテーショ
   ンロジックを解放します。
 – View と ViewModel は疎結合でお互いに交換可
   能な状態に戻すことにより、再利用性を高め
   View や ViewModel をライブラリ化しやすくします。
 – View と ViewModel と Model 全てにアクセス可
   能な存在なので、アンドゥ・リドゥの実装場所に最
   適です。
 – ViewModel から View をクローズするメッセージ
   は必要なくなります。
プレゼンター

• 親が子供を管理
 – ダイアログ を表示させたいPresenterは ダイアロ
   グを管理するPresenterを生成して、ダイアログが
   閉じたら解放します。
 – パネルなどのコンテナを管理するPresenterは、
   パネルの中身を管理するPresenterをパネル内に
   表示するときに生成してパネルから削除されると
   きに解放します。
プレゼンター

• コンテナ内をスライドして入れ替わる




         A画面      B画面
プレゼンター

• WPFやSilverlightではこんな画面変化も可能
  ですが、この場合はコンテナとなるパネルにス
  トーリーボードを仕掛けて RenderTransform
  の TranslateTransform を変化させて表示を
  変えます。
• 最初にA画面とB画面の View と ViewModel
  を用意してA画面を表示範囲内にB画面を表
  示範囲外に設定してストーリーボードを起動し
  ます。
プレゼンター

• MVVMパターンでは、 A画面とB画面の View
  と ViewModel を知っている何かの存在が必
  要でコンテナの View で実行するとしたら、か
  なりの密結合になってしまったと思います。
プレゼンター

• MVPVMパターンでは、 A画面のPresenterは
  A画面の View と ViewModel を知っていて、
  B画面のPresenterはB画面の View と
  ViewModel を知っています、コンテナの
  Presenterはコンテナの View と ViewModel
  の他に、 A画面とB画面のPresenterを知って
  います。
• 役割分担でき疎結合性も保たれます。
まとめ

• MVPVMパターンはMVVM の能力と機能をす
  べて利用でき、 MVPの拡張性からプレゼン
  テーションロジックの複雑さにも対応できます。
• MVPVMパターンは View と ViewModel は疎
  結合でお互いに交換可能な状態に戻すのに
  有効な手段です。
• 皆さんも検討してみたらどうでしょうか?

More Related Content

Viewers also liked

SEO Content Strategy for 2012 & Beyond - Presentation to Little Rock Chapter ...
SEO Content Strategy for 2012 & Beyond - Presentation to Little Rock Chapter ...SEO Content Strategy for 2012 & Beyond - Presentation to Little Rock Chapter ...
SEO Content Strategy for 2012 & Beyond - Presentation to Little Rock Chapter ...
Caitlin Jeansonne
 
Thesis Midterm032610
Thesis Midterm032610Thesis Midterm032610
Thesis Midterm032610
klee4vp
 
Orchestra at EngineYard
Orchestra at EngineYardOrchestra at EngineYard
Orchestra at EngineYard
David Coallier
 
Presentatie wijsheidsboeken 5v5 spreuken vyu 09102011
Presentatie wijsheidsboeken 5v5 spreuken vyu 09102011Presentatie wijsheidsboeken 5v5 spreuken vyu 09102011
Presentatie wijsheidsboeken 5v5 spreuken vyu 09102011
vineyardutrecht
 
Emixion Koffie verkeerd presentatie - Hoe converteer ik bezoekers
Emixion Koffie verkeerd presentatie - Hoe converteer ik bezoekersEmixion Koffie verkeerd presentatie - Hoe converteer ik bezoekers
Emixion Koffie verkeerd presentatie - Hoe converteer ik bezoekers
John Meijering ✔
 
Presentatie 27 Mei Cluster Htv
Presentatie  27 Mei Cluster HtvPresentatie  27 Mei Cluster Htv
Presentatie 27 Mei Cluster Htv
Johan Lapidaire
 
1:World@Haverford
1:World@Haverford1:World@Haverford
1:World@Haverford
Jane Greenspun
 
Sosialemedier221012
Sosialemedier221012Sosialemedier221012
Sosialemedier221012
Ingeborg Dirdal
 
Mahabharat Winning Strategies
Mahabharat Winning StrategiesMahabharat Winning Strategies
Mahabharat Winning Strategies
Rajesh Goyal
 
[参考情報]OSC広島のお知らせ
[参考情報]OSC広島のお知らせ[参考情報]OSC広島のお知らせ
[参考情報]OSC広島のお知らせ
Yoshitake Takata
 
Trainee's Chronicles
Trainee's ChroniclesTrainee's Chronicles
Trainee's Chronicles
Goffredo Dario Rossi
 
2012 mobile future in focus
2012 mobile future in focus2012 mobile future in focus
2012 mobile future in focus
Mediamaispasque
 
Resource Thursdays
Resource ThursdaysResource Thursdays
Resource Thursdays
ArtSpark
 
MBSI relationship marketing infographic
MBSI relationship marketing infographicMBSI relationship marketing infographic
MBSI relationship marketing infographic
RE/MAX Equity Group
 
SVH In Vogelvlucht Roc Aventus 2 3 2011
SVH In Vogelvlucht Roc Aventus 2 3 2011SVH In Vogelvlucht Roc Aventus 2 3 2011
SVH In Vogelvlucht Roc Aventus 2 3 2011
Johan Lapidaire
 
Kehityksellinen valmennus
Kehityksellinen valmennusKehityksellinen valmennus
Kehityksellinen valmennus
Anssi Balk
 
Alescon Heeft Passie Voor Horeca 20120305
Alescon Heeft Passie Voor Horeca 20120305Alescon Heeft Passie Voor Horeca 20120305
Alescon Heeft Passie Voor Horeca 20120305
Johan Lapidaire
 
Byggherreforskriften
ByggherreforskriftenByggherreforskriften
Byggherreforskriften
Fred Johansen
 
Wearable Technology + Social Media
Wearable Technology + Social MediaWearable Technology + Social Media
Wearable Technology + Social Media
Caitlin Jeansonne
 

Viewers also liked (20)

Top Dog Portfolio
Top  Dog  PortfolioTop  Dog  Portfolio
Top Dog Portfolio
 
SEO Content Strategy for 2012 & Beyond - Presentation to Little Rock Chapter ...
SEO Content Strategy for 2012 & Beyond - Presentation to Little Rock Chapter ...SEO Content Strategy for 2012 & Beyond - Presentation to Little Rock Chapter ...
SEO Content Strategy for 2012 & Beyond - Presentation to Little Rock Chapter ...
 
Thesis Midterm032610
Thesis Midterm032610Thesis Midterm032610
Thesis Midterm032610
 
Orchestra at EngineYard
Orchestra at EngineYardOrchestra at EngineYard
Orchestra at EngineYard
 
Presentatie wijsheidsboeken 5v5 spreuken vyu 09102011
Presentatie wijsheidsboeken 5v5 spreuken vyu 09102011Presentatie wijsheidsboeken 5v5 spreuken vyu 09102011
Presentatie wijsheidsboeken 5v5 spreuken vyu 09102011
 
Emixion Koffie verkeerd presentatie - Hoe converteer ik bezoekers
Emixion Koffie verkeerd presentatie - Hoe converteer ik bezoekersEmixion Koffie verkeerd presentatie - Hoe converteer ik bezoekers
Emixion Koffie verkeerd presentatie - Hoe converteer ik bezoekers
 
Presentatie 27 Mei Cluster Htv
Presentatie  27 Mei Cluster HtvPresentatie  27 Mei Cluster Htv
Presentatie 27 Mei Cluster Htv
 
1:World@Haverford
1:World@Haverford1:World@Haverford
1:World@Haverford
 
Sosialemedier221012
Sosialemedier221012Sosialemedier221012
Sosialemedier221012
 
Mahabharat Winning Strategies
Mahabharat Winning StrategiesMahabharat Winning Strategies
Mahabharat Winning Strategies
 
[参考情報]OSC広島のお知らせ
[参考情報]OSC広島のお知らせ[参考情報]OSC広島のお知らせ
[参考情報]OSC広島のお知らせ
 
Trainee's Chronicles
Trainee's ChroniclesTrainee's Chronicles
Trainee's Chronicles
 
2012 mobile future in focus
2012 mobile future in focus2012 mobile future in focus
2012 mobile future in focus
 
Resource Thursdays
Resource ThursdaysResource Thursdays
Resource Thursdays
 
MBSI relationship marketing infographic
MBSI relationship marketing infographicMBSI relationship marketing infographic
MBSI relationship marketing infographic
 
SVH In Vogelvlucht Roc Aventus 2 3 2011
SVH In Vogelvlucht Roc Aventus 2 3 2011SVH In Vogelvlucht Roc Aventus 2 3 2011
SVH In Vogelvlucht Roc Aventus 2 3 2011
 
Kehityksellinen valmennus
Kehityksellinen valmennusKehityksellinen valmennus
Kehityksellinen valmennus
 
Alescon Heeft Passie Voor Horeca 20120305
Alescon Heeft Passie Voor Horeca 20120305Alescon Heeft Passie Voor Horeca 20120305
Alescon Heeft Passie Voor Horeca 20120305
 
Byggherreforskriften
ByggherreforskriftenByggherreforskriften
Byggherreforskriften
 
Wearable Technology + Social Media
Wearable Technology + Social MediaWearable Technology + Social Media
Wearable Technology + Social Media
 

Similar to RIAアーキテクチャー研究会 第3回 セッション4 Mvpvm pattern

Xamarin.formsでのmvvm利用のコツ
Xamarin.formsでのmvvm利用のコツXamarin.formsでのmvvm利用のコツ
Xamarin.formsでのmvvm利用のコツ
Masuda Tomoaki
 
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
Akira Inoue
 
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Akira Inoue
 
ScalaMatsuri 2016
ScalaMatsuri 2016ScalaMatsuri 2016
ScalaMatsuri 2016
Yoshitaka Fujii
 
はじめての ASP.NET MVC
はじめての ASP.NET MVCはじめての ASP.NET MVC
はじめての ASP.NET MVC
jz5 MATSUE
 
GUI アプリケーションにおける MVC
GUI アプリケーションにおける MVCGUI アプリケーションにおける MVC
GUI アプリケーションにおける MVC
Yu Nobuoka
 
PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!
Shohei Okada
 
Knockout.js を利用したインタラクティブ web アプリケーション開発
Knockout.js を利用したインタラクティブ web アプリケーション開発Knockout.js を利用したインタラクティブ web アプリケーション開発
Knockout.js を利用したインタラクティブ web アプリケーション開発
Daizen Ikehara
 
Windows ストア lob アプリ開発のためのガイダンスとフレームワークのご紹介 rev
Windows ストア lob アプリ開発のためのガイダンスとフレームワークのご紹介 revWindows ストア lob アプリ開発のためのガイダンスとフレームワークのご紹介 rev
Windows ストア lob アプリ開発のためのガイダンスとフレームワークのご紹介 revShotaro Suzuki
 
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
Tomoharu ASAMI
 
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
U-dai Yokoyama
 
MvvmCross 入門
MvvmCross 入門MvvmCross 入門
MvvmCross 入門
jz5 MATSUE
 
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 EastiOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
irgaly
 
Vue入門
Vue入門Vue入門
Vue入門
Takeo Noda
 
KnockoutJSを使用したアプリケーションの構築例
KnockoutJSを使用したアプリケーションの構築例KnockoutJSを使用したアプリケーションの構築例
KnockoutJSを使用したアプリケーションの構築例
masakazusegawa
 
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
Tomoharu ASAMI
 
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発
Akira Inoue
 

Similar to RIAアーキテクチャー研究会 第3回 セッション4 Mvpvm pattern (20)

Mvpvm pattern
Mvpvm patternMvpvm pattern
Mvpvm pattern
 
Xamarin.formsでのmvvm利用のコツ
Xamarin.formsでのmvvm利用のコツXamarin.formsでのmvvm利用のコツ
Xamarin.formsでのmvvm利用のコツ
 
MVVM入門
MVVM入門MVVM入門
MVVM入門
 
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
 
Knockout
KnockoutKnockout
Knockout
 
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
 
ScalaMatsuri 2016
ScalaMatsuri 2016ScalaMatsuri 2016
ScalaMatsuri 2016
 
はじめての ASP.NET MVC
はじめての ASP.NET MVCはじめての ASP.NET MVC
はじめての ASP.NET MVC
 
GUI アプリケーションにおける MVC
GUI アプリケーションにおける MVCGUI アプリケーションにおける MVC
GUI アプリケーションにおける MVC
 
PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!
 
Knockout.js を利用したインタラクティブ web アプリケーション開発
Knockout.js を利用したインタラクティブ web アプリケーション開発Knockout.js を利用したインタラクティブ web アプリケーション開発
Knockout.js を利用したインタラクティブ web アプリケーション開発
 
Windows ストア lob アプリ開発のためのガイダンスとフレームワークのご紹介 rev
Windows ストア lob アプリ開発のためのガイダンスとフレームワークのご紹介 revWindows ストア lob アプリ開発のためのガイダンスとフレームワークのご紹介 rev
Windows ストア lob アプリ開発のためのガイダンスとフレームワークのご紹介 rev
 
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
 
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
 
MvvmCross 入門
MvvmCross 入門MvvmCross 入門
MvvmCross 入門
 
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 EastiOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
 
Vue入門
Vue入門Vue入門
Vue入門
 
KnockoutJSを使用したアプリケーションの構築例
KnockoutJSを使用したアプリケーションの構築例KnockoutJSを使用したアプリケーションの構築例
KnockoutJSを使用したアプリケーションの構築例
 
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
 
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発
 

Recently uploaded

協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
Osaka University
 
iMacwoSu_Gong_de_barabaranishitaHua_.pptx
iMacwoSu_Gong_de_barabaranishitaHua_.pptxiMacwoSu_Gong_de_barabaranishitaHua_.pptx
iMacwoSu_Gong_de_barabaranishitaHua_.pptx
kitamisetagayaxxx
 
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMMハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
osamut
 
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
sugiuralab
 
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
嶋 是一 (Yoshikazu SHIMA)
 
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobodyロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
azuma satoshi
 
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
tazaki1
 
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
ARISE analytics
 
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
Yuki Miyazaki
 
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
Osaka University
 

Recently uploaded (10)

協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
 
iMacwoSu_Gong_de_barabaranishitaHua_.pptx
iMacwoSu_Gong_de_barabaranishitaHua_.pptxiMacwoSu_Gong_de_barabaranishitaHua_.pptx
iMacwoSu_Gong_de_barabaranishitaHua_.pptx
 
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMMハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
 
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
 
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
 
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobodyロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
 
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
 
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
 
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
 
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
 

RIAアーキテクチャー研究会 第3回 セッション4 Mvpvm pattern

  • 2. アジェンダ • はじめに • MVPVM 設計パターン • ナビゲーション • プレゼンター • まとめ
  • 3. はじめに • MSDN マガジン2011年12月号で発表された 「MVPVM 設計パターン」ですが、私もViewと ViewMode​lの両方を知っていて現状の画面 状態を管理する何者かが​必要なことは感じて いました。 • Applicationの派生クラスやApplicat​ionが操 作するオブジェクトとして現状の画面状態を管​ 理やナビゲーションをする機能をつくっていま した。今回のセッションでは私なりに研究した 「MVPVM 設計パターン」をお届けします。
  • 4. MVPVM 設計パターン • モデル - ビュー - プレゼンター - ビューモデル (MVPVM: Model-View-Presenter- ViewModel) パターンは、 Microsoft patterns & practices の Prism プロジェクトで導入され ました。 • MVVM の能力と機能をすべて利用でき、 MVPの拡張性からプレゼンテーションロジック の複雑さにも対応でき、ViewModel は本来あ るべきプロパティ公開とコマンドの受付になり ます。
  • 5. MVPVM 設計パターン • MVPVMパターン – それではMVPVMパターンとはなんでしょうか? – MVVMパターン と MVPパターンを合体させたも のです。 – MVVMパターン と MVPパターンを見てみましょう。
  • 6. MVPVM 設計パターン • MVVMパターン – View:ユーザーインターフェースの外観や配置や 反応(インタラクション)を定義する – ViewModel:Viewの必要な情報をプロパティで公 開しユーザー入力やコマンドを処理する – Model:データの取得や管理を行いプログラムの 処理の中核となる
  • 7. MVPVM 設計パターン • MVVMパターン View Model コマンド データバイ ンド ViewModel プロパティ データ取得・更新
  • 8. MVPVM 設計パターン • MVPパターン – View:ユーザーインターフェースの外観や配置や 反応(インタラクション)を定義する – Presenter:Viewのナビゲーションを管理しユー ザー入力をModelに伝える – Model:データの取得や管理を行いプログラムの 処理の中核となる
  • 9. MVPVM 設計パターン • MVPパターン View Model 入力 Presenter ナビゲーション データ取得・更新
  • 10. MVPVM 設計パターン • MVPVMパターン – View:ユーザーインターフェースの外観や配置や 反応(インタラクション)を定義する – ViewModel:Viewの必要な情報をプロパティで公 開しユーザー入力やコマンドをPresenterに渡す – Presenter:ViewやのViewModelのナビゲーショ ンを管理しユーザー入力をModelに伝える – Model:データの取得や管理を行いプログラムの 処理の中核となる
  • 11. MVPVM 設計パターン • MVPVMパターン Presenter ナビゲーション View データ取得・更新 コマンド データバイ データ更新依頼 ンド ViewModel プロパティ Model
  • 12. ナビゲーション • ナビゲーション – MVVMパターンではどこがナビゲーションを担当 していたのでしょうか? – 答えの一つはメッセージ+ビヘイビアーです。 – ビヘイビアーはViewの分類になります。 – 「ViewModel から View を操作する」ということ葉 を聞いたことがある人もいるでしょう。 – 操作というのはメッセージを送ってメッセージボッ クスやダイアログを表示したりすることも多かった のです。
  • 13. ナビゲーション • メッセージボックス public class DialogMessageBehavior : Behavior<DependencyObject> { protected override void OnAttached() { base.OnAttached(); Messenger.Default.Register<DialogMessage>(AssociatedObject, p => Invoke(p)); } protected override void OnDetaching() { base.OnDetaching(); Messenger.Default.Unregister<DialogMessage>(AssociatedObject); } private void Invoke(object parameter) { DialogMessage message = parameter as DialogMessage; MessageBoxResult result = MessageBox.Show(message.Content, message.Caption, message.Button, message.Icon, message.DefaultResult, message.Options); message.ProcessCallback(result); } }
  • 14. ナビゲーション • ダイアログ public class DialogMessageBehavior : Behavior<Wndow> { protected override void OnAttached() { base.OnAttached(); Messenger.Default.Register<DialogMessage>(AssociatedObject, p => Invoke(p)); } protected override void OnDetaching() { base.OnDetaching(); Messenger.Default.Unregister<DialogMessage>(AssociatedObject); } private void Invoke(object parameter) { DialogMessage message = parameter as DialogMessage; AssociatedObject.DataContext = message.ViewModel; bool? result = AssociatedObject.ShowDialog(); message.ProcessCallback(result); } }
  • 15. ナビゲーション • ナビゲーション – MVVMパターンでは他にどこがナビゲーションを 担当していたのでしょうか? – 答えの一つはViewModel+DataTemplateです。 <DataTemplate DataType="{x:Type c:GreekGodViewModel}"> <TextBlock Text="{Binding Path=Name}" Foreground="Gold"/> </DataTemplate> – さらに DataTemplate をデータによって切り替え る DataTemplateSelector というのもあります。 – DataTemplate はViewの分類になります。
  • 16. ナビゲーション • DataTemplateSelector public class TaskListDataTemplateSelector : DataTemplateSelector { public override DataTemplate SelectTemplate(object item, DependencyObject container) { FrameworkElement element = container as FrameworkElement; if (element != null && item != null && item is TaskViewModel) { var taskitem = item as TaskViewModel; if (taskitem.Priority == 1) return element.FindResource("importantTaskTemplate") as DataTemplate; else return element.FindResource("myTaskTemplate") as DataTemplate; } return null; } }
  • 17. ナビゲーション • MVVMパターンは、View と ViewModel は疎 結合でお互いに交換可能であるということが 利点の一つであるといわれていました。 • どうして今見てきたような密結合が生まれてし まったのでしょうか? • ナビゲーションは View と ViewModel の両方 を知らないとできません、この場合 View に仕 込んでますので ViewModel や 本来 ViewModel にあるべきデータが View に出 てきてしまいます。
  • 18. ナビゲーション • ナビゲーション – MVVMパターンではViewだけがナビゲーションを 担当していたのでしょうか? – 答えの一つはアプリケーションクラスです。 – アプリケーションクラスはMVVMパターンの範囲 外です。 – 範囲外であれば別に問題ないのでしょうか? – ナビゲーションを担当する Presenter があればア プリケーションクラスはすっきりするはずです。
  • 19. ナビゲーション • アプリケーションクラス protected override void OnStartup(StartupEventArgs e) { var win = new Views.TwitterWindow(); this.MainWindow = win; var account = LoadAccount(); if (account == null) account = NewAccountWithDialog(); if (account != null) SaveAccount(account); else { MessageBox.Show("認証失敗"); return; } var vm = new ViewModel.TwitterViewModel( ConsumerKey, ConsumerSecret, account.Token); win.DataContext = vm; win.Show(); base.OnStartup(e); }
  • 20. プレゼンター • プレゼンターの役割 – View と ViewModel のインスタンス作成を行いま す。 – View をパネルなどのコンテナに追加し、 DataContext に ViewModel をセットします。 – Model に表示すべきデータを要求し ViewModel にセットします。 – 上位の Presenter や ViewModel の依頼により 更新すべきデータを収集し Model を更新します。 – View と ViewModel のインスタンス解放を行いま す。
  • 21. プレゼンター • プレゼンターの構成 – Presenter はパネルなどのコンテナで複数の Presenter を管理する Presenter と、ユーザーコ ントロールやダイアログなどの単一ビューを管理 するPresenter があります。 – View や ViewModel が階層構造になっているよ うに Presenter も階層構造になります。
  • 22. プレゼンター • プレゼンターの利点 – Application や ViewModel からプレゼンテーショ ンロジックを解放します。 – View と ViewModel は疎結合でお互いに交換可 能な状態に戻すことにより、再利用性を高め View や ViewModel をライブラリ化しやすくします。 – View と ViewModel と Model 全てにアクセス可 能な存在なので、アンドゥ・リドゥの実装場所に最 適です。 – ViewModel から View をクローズするメッセージ は必要なくなります。
  • 23. プレゼンター • 親が子供を管理 – ダイアログ を表示させたいPresenterは ダイアロ グを管理するPresenterを生成して、ダイアログが 閉じたら解放します。 – パネルなどのコンテナを管理するPresenterは、 パネルの中身を管理するPresenterをパネル内に 表示するときに生成してパネルから削除されると きに解放します。
  • 25. プレゼンター • WPFやSilverlightではこんな画面変化も可能 ですが、この場合はコンテナとなるパネルにス トーリーボードを仕掛けて RenderTransform の TranslateTransform を変化させて表示を 変えます。 • 最初にA画面とB画面の View と ViewModel を用意してA画面を表示範囲内にB画面を表 示範囲外に設定してストーリーボードを起動し ます。
  • 26. プレゼンター • MVVMパターンでは、 A画面とB画面の View と ViewModel を知っている何かの存在が必 要でコンテナの View で実行するとしたら、か なりの密結合になってしまったと思います。
  • 27. プレゼンター • MVPVMパターンでは、 A画面のPresenterは A画面の View と ViewModel を知っていて、 B画面のPresenterはB画面の View と ViewModel を知っています、コンテナの Presenterはコンテナの View と ViewModel の他に、 A画面とB画面のPresenterを知って います。 • 役割分担でき疎結合性も保たれます。
  • 28. まとめ • MVPVMパターンはMVVM の能力と機能をす べて利用でき、 MVPの拡張性からプレゼン テーションロジックの複雑さにも対応できます。 • MVPVMパターンは View と ViewModel は疎 結合でお互いに交換可能な状態に戻すのに 有効な手段です。 • 皆さんも検討してみたらどうでしょうか?