「Model View ViewModel」を編集中

ナビゲーションに移動 検索に移動

警告: ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。ログインまたはアカウントを作成すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。

この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。

最新版 編集中の文章
1行目: 1行目:
'''Model View ViewModel'''(略称:MVVM)とは、[[ユーザーインターフェイス]]([[UI]])を構築するための[[デザインパターン]]のひとつです。
+
'''Model View ViewModel'''(MVVM)とは、[[ユーザーインターフェイス]]([[UI]])を構築するための[[デザインパターン]]のひとつである。
  
==概要==
+
勉強中。
最近流行の[[仮想化]]を[[プログラミング]]における[[デザインパターン]]として取り入れたものです。大雑把にいえば、実体の無い「仮想的なUI」である「ビューモデル」を用意して、そこで動作検証を済ませようというものです。
 
  
== 利点と欠点 ==
+
=== MVVMの構造 ===
=== 利点 ===
+
== モデル(Model) ==
* UIを仮想化するので[[単体テスト]]がしやすい
+
モデルはアプリケーションのデータを格納する部分。
 +
ビジネスドメインの操作と[[データ]]からなる[[オブジェクト]]で、UIからは独立している。
  
=== 欠点 ===
+
[[MVC]]パターンのモデルと同じもの。
* [[ハローワールド]]すら[[ソースコード]]が壮大になる
 
** プログラマーやデザイナーの学習コストが大きい
 
** [[ソースコード]]の量に比例して[[バグ]]の量も増える。ただし[[バグ]]は潰しやすい。
 
  
=== 総評 ===
+
== ビューモデル(ViewModel) ==
[[ITドカタ]]たちが高層ビルのような壮大な[[システム]]を建造する際の技法であり、[[日曜プログラマー]]が犬小屋のような小物アプリを作る際に使うような代物ではない。まさに適材適所であり、小物であれば[[MVC]]の方がいいです。
+
ビューモデルは操作とデータに対する純粋な表示を受け持つ。
  
== MVVMの構造 ==
+
ここで注意しなければならないのはビューモデルはUI自体ではないという点。たとえばビューモデルはボタンやスタイルなどの視覚的な機能を持たない。あくまでUIを抽象化したものである。さらにビューモデルはビューの参照を持たない。[[単体テスト]]がよりいっそう捗る。
=== モデル(Model) ===
 
MVVMにおけるモデルとは、[[ビジネスロジック]]を記述する部分である。
 
いわゆる[[MVC]]パターンのモデルと同じものである。
 
  
プレゼンテーション層、ドメイン層、データソース層の3層からなる[[ドメイン駆動設計]](通称:DDD)の思想に乗っ取れば、モデルはドメイン層に相当するものであるが、一般的にはその下のデータソース層までを含む。それどころかデータソース層に[[SQL]]などを用いて読み書きしているだけというシステムも多い。
+
== ビュー(View) ==
 +
ビューは、ビューモデルから得た情報を表示したり、ビューモデルにコマンドと呼ばれる操作を送ることに特化する。
  
=== ビューモデル(ViewModel) ===
+
[[MVC]]パターンとの決定的な違いはこのビューであり、MVCではコントローラーがモデルとビューを結び付け、以降はビューとモデルが好き勝手にやっていたが、MVVMではビューが通信できるのはビューモデルだけである。例えるなら、MVCは直球な出会い系サイトで、MVVMは監視人がいて建前上は出会い系サイトではないSNSゲームサイトといったところか。
MVVMにおけるビューモデルとは、操作と[[データ]]に対する純粋な表示を受け持つ部分である。
 
大雑把にいえば「UI(ビュー)を仮想化(抽象化)したもの」である。
 
 
 
ビューモデルは仮想のUI(ビュー)であり、たとえば"ファイルに保存する"などという「操作」をメソッド化し(コマンドと呼ばれる)、その結果は単純にメンバ変数などに反映させておくというものである。
 
 
 
MVCパターンにおけるビューでは、"ファイルに保存する"という動作がメインメニューとツールバー、さらにはショートカットキーの3通りもある場合には、[[ソースコード]]の書き方次第ではそれぞれに重複して似たようなメソッドが定義されることもしばしばあるが、MVVMパターンではUIを仮想化しているため動作はひとつとなる。
 
 
 
さらにビューモデルはビューの参照を持たず、ビューがどうなっていようと知ったことではないというのが重要な要素のひとつである。
 
 
 
こうすることによって[[単体テスト]]が桁違いに捗ること間違いなし。
 
 
 
=== ビュー(View) ===
 
MVVMにおけるビューとは、仮想のUIであるビューモデルに肉付けを行い、実際のUIを実現する部分である。
 
ビューモデルから得た情報を表示したり、ビューモデルにコマンドと呼ばれる操作を送ることに特化する。
 
 
 
大雑把な例であるが、一切装飾をしていない[[HTML]](ビューモデル)に、壮大な[[CSS]]で装飾し[[JavaScript]]でゴリゴリする(ビュー)ようなものである。
 
 
 
[[MVC]]パターンとの決定的な違いはこのビューであり、MVCではコントローラーがモデルとビューを結び付け、以降はビューとモデルが好き勝手にやっていたが、MVVMではビューが通信できるのはビューモデルだけである。
 
 
 
極端に言えば、[[パソコン]]向けのUI(ビュー)と[[iPhone]]向けのUI(ビュー)が別物であっても、ビューモデルに定義される「操作」は同一にできるという話である。ただし私の知る限りではMVVMは単体テストを捗らさせる目的で使っているものばかりであり、マルチプラットフォームのために使用しているという事例は実際には見たことも聞いたこともない。
 
 
 
==主なMVVMフレームワーク==
 
===.NET===
 
*[[WPF]]
 
*:実質的に[[Windows]]でしか使えない。[[デバッグ]]が容易になるが[[コード]]量が増えるので相殺され意味なし。
 
*[[MvvmCross]]
 
*:定番。[[NuGet]]が用意されてなくて若干不便。
 
*[[ReactiveUI]]
 
*:知らん。
 
*[[ReactiveProperty]]
 
*:知らん。日本製らしいが[[Xamarin.Forms]]ネタばかりで[[Xamarin.iOS]]での使い方がわからなかったので30分で諦めた。
 
===JavaScript===
 
* [[knockout.js]]
 
  
 
== 関連項目 ==
 
== 関連項目 ==
* [[デザイン・パターン]]
+
* [[Model View Controller]]
** [[Model View Controller]]
 
** [[Model View ViewModel]]
 
 
 
 
== 参考文献 ==
 
== 参考文献 ==
{{reflist}}
+
<references/>
 +
== 外部リンク ==
  
 
{{stub}}
 
{{stub}}

MonoBookへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細はMonoBook:著作権を参照)。 著作権保護されている作品は、許諾なしに投稿しないでください!

このページを編集するには、下記の確認用の質問に回答してください (詳細):

取り消し 編集の仕方 (新しいウィンドウで開きます)

このページで使用されているテンプレート:

このページは 1 個の隠しカテゴリに属しています: