MVVMについて語ろう

■ このスレッドは過去ログ倉庫に格納されています
2012/06/06(水) 11:03:33.21
WPF/Silverlight/WinRT開発の必須技術、MVVMについて語ろうではないか!
2012/06/07(木) 00:14:54.65
その「アプリケーション(Model)」っていう言い方も微妙だが…。
生成されたVMがMをどう参照するかは、VM自体の話というよりアプリケーションインフラの話というならそうだけど。
でも、その話すらしないのだとしたら、本当に何の話をするんだ?
2012/06/07(木) 00:15:55.19
ザックリ分けると
・DBとのやり取りやAsync、Rxなど含めたアプリケーションロジック的な部分。
・MVVMとしての各画面の作り方の部分
・Prism的にDIやサービスロケータ含めたクライアントアプリとして構造的な部分
って感じかね。
2012/06/07(木) 00:16:50.09
>>30で良いなら、それがもう結論じゃん。それ以上なにか言うことがあるの?
2012/06/07(木) 00:23:50.25
>>33
>>30の話だけでナイスなWPFアプリが作れるんだったらいいんじゃないの?
2012/06/07(木) 00:36:57.38
MVVMの実装に関する話ならいくらでもできるんじゃね
2012/06/07(木) 01:12:27.18
むしろそちらの方を知りたいという人間多いんじゃね?
MVVM的に考えるとコマンドはVMに置くべきか否か
コードビハインドとイベントハンドラとVMの関係
コードビハインドはいわゆるプレゼンターか否か
バインディングとMVVMは切り離して考えるべきか否か
MVVMとしてふさわしいVMの実装は
もっと高速にVMを実装する方法はないかとかね
2012/06/07(木) 01:13:45.85
あとMVVMツールの良し悪しや使用方法についてとか
38デフォルトの名無しさん
垢版 |
2012/06/07(木) 01:19:01.75
ビヘイビアってよく聞くけどVMに入るの?
2012/06/07(木) 06:11:20.38
>>32みたいな、アプリケーション構造の話をするのはこのスレではあり?、なし?
MVVMフレームワークの実装比較の話は俺も聞きたいな。
2012/06/07(木) 06:16:05.12
定義論にまた脱線しない限りまあいいんじゃね
2012/06/07(木) 08:14:29.03
>>39
むしろそのためのスレだろ
2012/06/07(木) 09:30:27.00
Mっとういか、VVMじゃない部分の話をしだすと荒れる傾向にあるじゃん。
その境界がどこかの確認。
2012/06/07(木) 09:57:41.92
>>42
新参者だが、荒れるん?
むしろMVVM作る上で重要なファクターだと思うんだが。
2012/06/07(木) 10:11:41.27
Modelって言う言葉が出るだけで、すぐ定義論と決めつけて、プレゼンテーション層以外のどうでもいい話なんです!、な発言が出てくるから。
その一方で、アプリケーション構造部分までModelという言い方をする人も居るので。
2012/06/07(木) 10:16:56.33
何度も言うが、MVVMで焦点当てて考えにゃならんのはプレゼンテーション層であって、Modelは二の次だと何度いわせりゃいいんだか
MVVMがXAMLというDSLに極めて特化したパターンだということを考慮せねばならんよ
2012/06/07(木) 10:28:50.09
本来VとMだけ分離すればいいのだが、XAMLの場合、バインディングを強く意識した設計になっている。
そこでV〜M間に仲介者を設け、V(XAML)、VM(C#)の二層構造とし、VMにViewの状態とModelのデータを保持させて
V〜VM間をバインディングで通信するのがMVVM。
2012/06/07(木) 10:30:41.00
ほらw

>>45の意見なら、このスレですべきは>>36みたいな話であって、>>32みたいな話は別途
WPF/MVVMおけるアプリケーション構造について語ろう、みたいなスレを立てろって話になるし。
2012/06/07(木) 10:35:21.73
>>45
それは>>32でいう2つめを見てるだけであって、実際のアプリを作るには1も3も必要だろ。
2012/06/07(木) 10:58:40.42
>DBとのやり取りやAsync、Rxなど含めたアプリケーションロジック的な部分。

ってMVVMとどう関係あるの?
洋の内外問わず、これについて論じてるMVVMの記事って見たことないんですがw
2012/06/07(木) 11:00:01.66
>>48
VMとM間の通信は考えなければならんが、M内の構造については別のパターンを導入すべきだろ
2012/06/07(木) 11:04:12.67
>>49,50
M内の構造はMVVMとは関係ないよ。
でも実際のアプリを作る上ではどこまでをMとするか、そのMをどういう仕組で作るか、それらとV,VM含めたものを紡ぎ上げるにはどうしたら良いか考えないと出来ないでしょ?
MVVMはあくまでもUIを作る上でのパターンであって、実際のアプリはその他のパターンが組み合わさったもの。
2012/06/07(木) 11:07:44.33
>>51
ああ、ごめん。IDが出ないから流れがわかりにくいなこのスレ
>>49>>47への反論です
>>50も俺だけど>>51と全く同意
2012/06/07(木) 11:16:28.31
>>46
そもそもVMはV層でしっかりVとMの分離になってるんじゃないか
Mの設計がVMなしにそのまま使える物であればVMの省略もしばしばみられるし
2012/06/07(木) 11:18:42.66
やっぱり、VVM内に閉じた話だけを扱うスレなのか?、MVVMを使用したアプリケーションの構造まで扱うのがOKなスレなのか?、っていう最初に戻るじゃん。
VMとMの繋ぎは考えるなら、サービスロケータあたりの話からがグレーゾーンになってくると思うけど。
2012/06/07(木) 11:26:13.73
定義論に発展しない限りどうでもいいと言ったら定義論がヒートアップしてたでござる
定義知りたきゃMVVMでぐぐってろ
2012/06/07(木) 11:27:07.00
そもそもMVVMってなに?
2012/06/07(木) 11:27:49.63
>>56
>>2
2012/06/07(木) 11:33:08.35
Model
アプリケーションのドメイン(問題領域)を担う、そのアプリケーションが扱う領域のデータと手続き(ビジネスロジック - ショッピングの合計額や送料を計算するなど)を表現する要素である。
多くのアプリケーションではデータの格納に永続的な記憶の仕組み(データベースなど)が使われていたり、
サーバが別途存在するアプリケーションではサーバ側との通信ロジックなどが含まれている。
MVVMの概念ではMVCの概念と同様に、データの(UI以外の)入出力は取り扱わないので、強いて言うならばそれらはModelの中に隠蔽されると考えられる
一般的にModelはドメインを担当すると言われるがこの言葉だけをもってModelの役割を想像するのは難しい。
たとえばクライアントサーバモデルのアプリケーションのクライアントアプリケーション側は、そのドメインそのものがプレゼンテーションになっている。
アプリケーションをプレゼンテーションとドメインに分けて考えようとした際にはこの事が混乱の一因となっている。
Modelの役割は、後述するViewとViewModelの役割以外の部分と考えるのが妥当である。
2012/06/07(木) 11:34:10.24
MVVMの定義自体は、みんなさほど異なる認識を持っているとは思わんが。
それをわかった上で、アプリケーション固有の話が出てくるのをわかった上でアプリケーション構造の話をするか、しないかについて話てるだけじゃね?
2012/06/07(木) 11:36:30.09
>>58
それってU氏の記述だろ?
2012/06/07(木) 11:40:56.25
わかりにくいからMVVMをガンダムでたとえて
2012/06/07(木) 11:47:53.91
>>54
そこまで細分化しても意味ないと思うから、自分はぜんぶ含めていいと思うの(´・ω・`)
2012/06/07(木) 11:49:55.46
>>61
M=ララァ
VM=サイコミュ
V=ビット
2012/06/07(木) 11:58:29.11
>>63
なんとなくこれ思い出した
http://d.hatena.ne.jp/hilapon/20120426/1335411488
2012/06/07(木) 12:54:35.30
スレのあり方を議論するだけで終わりそうだw
2012/06/07(木) 13:03:38.18
おまえが勝手に思ってるだけだろ
2012/06/07(木) 13:17:43.48
質問です。
ButtonクリックしてViewModelからWindowクローズしたいんだけど、ViewModel側にはどう書いたらいいのでしょうか?
2012/06/07(木) 13:21:47.51
ウィンドウを閉じる動作はViewで完結しているものなんじゃないでしょうか
2012/06/07(木) 13:57:19.39
ウィンドウサイズ保存したい
2012/06/07(木) 13:57:28.88
>68
そうなんですか?わかりました...(´・ω・`)
2012/06/07(木) 14:36:34.99
>>69
コードビハインドで実装すればいいよ
2012/06/07(木) 14:36:56.58
>>68
未保存のデータがあるときだけ確認メッセージを表示とか、Viewだけじゃ完結しないだろ。
2012/06/07(木) 16:02:42.75
LivetのMessengerクラス使えば、ViewModelからWindow閉じたり最大化・最小化を操作できる
http://d.hatena.ne.jp/hilapon/20111108/1320728308
2012/06/07(木) 16:10:07.46
よし分かった、俺がこれがコードビハインドだって
お手本のプログラムを作って見せてやるよ。
2012/06/07(木) 16:21:57.25
>>73
他のMVVMツールにも同様の機能はありますか?
2012/06/07(木) 17:01:49.59
>>75
その部分だけパチってくればいいじゃん。
2012/06/07(木) 19:40:33.37
ugaya40さん、MVVMの本書いてよ。
2012/06/07(木) 20:19:01.71
彼は文書よりもLivetのチュートリアルの優先度をあげるべきだろ。
2012/06/07(木) 20:39:57.25
チュートリアルないと使えないか?
サンプルなら探せばそれなりにあると思うけど
2012/06/07(木) 20:47:05.63
使える使えないという話ではなく、広くアピールしたいならそういう地味な作業の優先度の方が高いんじゃないの、という話。
2012/06/07(木) 20:47:06.97
ugaya40さんって誰?と思ってこれを読んだけど
http://ugaya40.net/wpf/mvvm-mvc-mvp-pm-eventdriven.html

MVPとPresentation Modelの認識がおかしいな
まぁ全体として意味は通じるけど…
2012/06/07(木) 20:52:17.02
ところで、これってMVCとどう違うの?
MVCのときとMとVも当然違うと思うんだけど。
2012/06/07(木) 20:52:18.22
u氏の言っていることは、VVMや実装の話についてはほぼ同意だしすごいとも思っているけど。

ただ、そこからMよりの話やもっと大きな構造の話になってくると、言っていることが微妙というか、
言おうとしていることはわかるけど、他の人の同意は得られないだろうな、っと思うことが多いかな。
2012/06/07(木) 21:28:22.45
Livet使ってるけど2chの名無しに返信しないで欲しい、とだけ言っておきたい
2012/06/07(木) 22:11:46.33
Livetネタは荒れるからやめろ。
本人に直接聞け。
2012/06/07(木) 22:23:47.65
>>77
そんなニッチ層向けの本書いても売れないだろ
2012/06/07(木) 22:59:32.63
MVVMってどれがええの?
Livetがオススメ?
2012/06/07(木) 23:01:51.98
mvvmlight
2012/06/08(金) 00:29:17.99
それはプログラミングにどの言語がいいのかと聞くようなもので
PrismもLivetもMVVMLightもどれも一長一短だからな
人に聞けばたぶんバラバラに返ってくるだろうから
一度使ってみて使いやすいのを判断したほうが早い
2012/06/08(金) 01:33:55.43
>>81
どの辺が認識おかしいの?
2012/06/08(金) 08:13:09.32
>>89
そういうんでは、その一長一短を聞きたいんだろ。
ぜんぶ試すってのはなかなか難しい。
2012/06/08(金) 10:23:56.69
>>86
いや、結構売れるかも知れんぞ。
2012/06/08(金) 11:41:06.72
VMへのサービス層のDIってどうやるべきものなの?
それ以前に、VMとMを繋ぐ方法として、VMにサービス層をインジェクションする、っていう考え方はあってる?
2012/06/08(金) 11:59:23.74
>>93
時と場合によるんだろうけど、そうするとMでやるべきのがぜんぶVMに来ない?
2012/06/08(金) 12:38:59.57
>>94

自分が想定したのは以下の様なサービスファサードがあったとして。

interface HogeServeiceFacade
{
IE<Foo> GetFooList();
}

HogeServeiceFacadeの実装の中では、外部サービスにアクセスしたり、ドメインモデルによる処理をしたり。
HogeServeiceFacade自体はバッチやWebでも使うものだとして。

ここがファサードになるので、それ以上Mの処理がVMに来ることは無いと思っているんだけど。

っで、このHogeServeiceFacadeとVMを接続する方法にコンテナ/サービスロケータを使う場合に
どうするのかとか?、それって考え方としてそもそもあっているの?、っていうのを聞きたかった。
2012/06/08(金) 12:44:10.40
>>95
そういうんではありなんじゃない?
そもそもMVVMは大本はViewとMの分離があって、それにさらに薄いVMいれると更にセパレーションで来て良いよねって話だから。
で、ロケータ使う場合色々あるけど既存の使うか自前で作るかじゃない。
薄いやつなら実質ただのKeyValueで出来るだろうし、それで結構まかなえると思われ。Prismとかはその辺も実装されてる。DIがより良くインテグレートされてる。他は知らん。
2012/06/08(金) 13:03:47.05
コンバータ(IValueConverterを実装したクラス)はMVVMのどの層に属するものなの?
2012/06/08(金) 13:07:30.90
>>97
View
2012/06/08(金) 13:20:41.29
コンバータ自体簡易VMみたいなもんじゃね?
2012/06/08(金) 13:32:59.19
>>97
それを分類することに何か意味があるの?
2012/06/08(金) 13:47:18.95
コンバータ、StringFormat、VMでの詰め替え等が混在していると保守性が悪くなりそうだ
2012/06/08(金) 13:55:44.00
VMでなんでも出来はするるが、責務としてVMでやるのはデータ構造の変換までにして、色だの文字だのの修飾はコンバーターでやるべきだろう。
2012/06/08(金) 13:57:35.24
自分はコンバータも形式の変換で、修飾なりなんなりはViewにやらせるな
2012/06/08(金) 14:47:38.34
おまえらユニットテストには何使ってるの
2012/06/08(金) 14:53:47.65
>>96
Thx

考え方としてはありか。

Prismにはその辺の仕組みもあるのね。
じゃあ、各フレームワークでそういう機構を持っているものについて、該当クラス名とかを知っている人がいたら教えて下さい(*・ω・)*_ _)ペコリ

後は自分で調べるので。
2012/06/08(金) 15:13:12.05
>>104
NUnit
2012/06/08(金) 15:14:23.05
MVCとかMVPとかのパターンを判りやすく解説してる本あったら教えて
2012/06/08(金) 15:24:26.98
>>104
俺もNUnit。
2012/06/08(金) 15:27:32.55
上のご神託を読んでこい。
2012/06/08(金) 15:36:30.90
>>109
いや、MVVMの前提となるMVCやMVPについて知りたいんだが
やっぱファウラー先生あたりの本になるのかな?
2012/06/08(金) 15:57:52.51
偉い先生が書いたものとか読んだことないわー
MVCとかなにかのパターン本に乗ってたけどネットで探れるのと大差ない。
MSDNでMVPVMの説明してるやつでMVC,MVP説明してるのあったお
2012/06/08(金) 16:02:11.72
MVCではクライアントはC(イベントハンドラ、リスナー、コールバック)に
アクセスしてVがレスポンスとして帰ってくるのに対し、
MVVMはクライアントがVにアクセスしてVが帰ってくる感じだな。

HTMLならステートレスなMVCが、Viewがクライアント内にある
ステートフルなappletとかsilverlight、デスクトップGUIならMVVMが良さそうだ。
2012/06/08(金) 16:12:29.99
MVCについて知りたいならSmalltalkを調べろ。
WebのMVC(2)ならむしろRESTってキーワードで調べろ。
MVVM自体に関する本は知らん。
そしてそれとは関係無しに、PoEAAなんかも読んでおくべき。
PoEAAだけ読んで、ドメインモデルvsトランザクションスクリプト厨になったりする奴も多いけどな。
2012/06/08(金) 16:18:06.91
そろそろ電子書籍で売ってくれ
2012/06/08(金) 17:40:37.50
>>113
MVCってSmalltalkコミュニティから提唱されたのか
2012/06/08(金) 18:47:52.68
たしか。
オブジェクト指向の元祖たるSmalktalkで発展したものだと効いた希ガス
2012/06/08(金) 19:10:59.99
良スレの予感。
2012/06/08(金) 20:31:39.36
やっぱりVMのライフサイクル管理やVMへのインジェクションを行うサービスロケータはあっても良いよな。
アプリケーションの構造によっては別にいらないだろうけど。
2012/06/09(土) 10:42:20.11
複数ViewModel間の呼び出しってどうすべき?
120デフォルトの名無しさん
垢版 |
2012/06/09(土) 11:28:54.73
public string Name
{
  get { return Model.Name; }
  set { Model.Name = value; }
}

こういう感じで VM で M のプロパティを V に伝えるためだけの
プロパティってなんていうの?
2012/06/09(土) 11:41:10.30
ごめん、knockout.js の話題はここで良い?
2012/06/09(土) 11:45:02.52
>>120
NotifyPropertyChanged使わないなら直接Modelのプロパティにバインドしてよくね
2012/06/09(土) 14:57:44.75
>>122
難読化でいちばん隠したい部分がまる見えになるからオススメできない
プロパティ多すぎて書きたくねぇ!ってならT4
2012/06/09(土) 16:03:19.03
難読化か。難読化なら確かにラッピングは必要かもしれんが
internalなViewModelじゃだめなん?
2012/06/09(土) 22:58:26.63
ラムダ式からプロパティ名を取り出す方法なら難読化できるよ
126125
垢版 |
2012/06/09(土) 23:02:50.05
ああXAMLには影響が出るから無理か
インターフェイスが曝されるだけなら別によくない?
VMでラップしまくるのも大差ないと思うが
2012/06/10(日) 02:20:40.65
まあ全部ラッピングしたらしたでやっぱり中身の名前はそのまま出てくるわけだしな
それなら直接Model繋げた方がいい
2012/06/10(日) 19:31:10.74
ふむ。
ttp://www.mnow.jp/LinkClick.aspx?fileticket=U%2b2U8DNLxfs%3d&tabid=220&mid=867

確かにナビゲーションなんかは、MessengerやBehaivorで解決できはするんだけど、
VVMの責務としてどうなのかとか、MVVMというよりもBlend至上主義になりすぎているのではと思うことはあって。

何かしら別の層があっても良いと感じてはいたが。
それをPと呼ぶかどうかはともかく。
2012/06/10(日) 19:42:58.13
世の中にはコードビハインドというものがあってだな
2012/06/10(日) 20:08:46.96
コードで書くかと、コードをどこに書くかは全然違う話であってだな
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況