1read 100read
2013年02月プログラム140: MVVMについて語ろう (618) TOP カテ一覧 スレ一覧 2ch元 削除依頼
VB.NETのとんでもない欠陥に気づいた (298)
C#は糞2.0 (802)
GPGPU#5 (276)
関数型言語ML (SML, OCaml, etc.), Part 6 (594)
MFC相談室 mfc22d.dll (307)
awkについて語るスレ $2 (733)

MVVMについて語ろう


1 :2012/06/06 〜 最終レス :2013/02/04
WPF/Silverlight/WinRT開発の必須技術、MVVMについて語ろうではないか!

2 :
関連記事
Model View ViewModel
http://ja.wikipedia.org/wiki/Model_View_ViewModel
Model-View-ViewModel デザイン パターンによる WPF アプリケーション
http://msdn.microsoft.com/ja-jp/magazine/dd419663.aspx
MVVMパターンの常識 ― 「M」「V」「VM」の役割とは?
http://www.atmarkit.co.jp/fdotnet/chushin/greatblogentry_02/greatblogentry_02_01.html
MVVMパターンとイベント駆動開発、そしてMVC/MVP/PMパターンとの関係 ? 何故MVVMなのか
http://ugaya40.net/wpf/mvvm-mvc-mvp-pm-eventdriven.html
「MVVMパターンが必要な理由」啓蒙用資料公開
http://ugaya40.net/mvvm/mvvm_document.html

3 :
語れるほどニーズあんのか?

4 :
MVCよりはまし。
でも、MVCすら理解できないのが大半だからなー

5 :
MVPとMVC混同してる人けっこういるよね

6 :
UIパターン知らんでMVVM知ろうとしても無理ゲー

7 :
>>5
実装上の違いだけで本質的には同じもの
そこにこだわるってことは、たぶん本質が分かってないんだろうな

8 :
語ることあるのか知らんが期待しとく

9 :
要するにXAMLで開発してれば自動的にMVVMなんでしょ?
開発環境を作ってるのでも無ければ、あんまり純粋主義主義者になる意味は無いと思う。

10 :
このスレッドは天才pンジー「アイちゃん」が
言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
                  京都大学霊長類研究所

11 :
MVVMツールがVSに標準装備されてないことか推測するに、MVVMがXAMLUIに必須でないことが判る

12 :
>>9 自動的にMVVMではない。
>>11 必須ではないが有用。

13 :
デザインパターンと同じで、フレームワークの名称じゃないからね
自分でフルスクラッチしてもいいんじゃよ? 別にむずかしくないし
でも「mstest? なにそれおいしいの?」って子は
本来のメリットの半分もえられないからこれまで通りにかけばいいんじゃないの

14 :
MVVMで実際のDBに繋いでCRUDのサンプルってないね。
DBのあたりはEntity Frameworkでいいの?

15 :
つか語呂悪い。なんで最後だけ二文字なんだよ。

16 :
>14
プレゼンテーション層以外はすべてModelなのでどうでもいい話
>15
回文

17 :
>>15
じゃあ何て略したらいいんだよw

18 :
Mのぶぶんは別になんでもいいお。
そもそもMの部分はVMとのセパレーションさえできていればいわゆるModel的なものですらなくていいと思う。
なんというかViewに関連しないものでありさえするなら、ステートを持つ実体的なものでもサービスとのやり取りをするProxi的なものでもなんでも。
実際のアプリではVMとMが一体化してるようなものもあると思われ。

19 :
アプリケーションや実装固有の話だからといって、MVVMにおけるMやMVCにおけるMのパターンを語る気が無いなら
「V-VM-VとVM以外パターン」とか「V-C-VとC以外パターン」とか言っておくべきだな。

20 :
Mはドメインロジックなのでモデルといって問題ない

21 :
つうか、むしろ話としては、VVMな部分の話よりも、MVVMにおけるMの話の方が語ることは多いと思うが。
VMとして責務を分離する話に、スレを立てるほどの広がりがあるのかなあ?

22 :
ドメインロジックという言葉が何に対してでも都合良く使われる問題。

23 :
実装の話とか?

24 :
>>22
それはすげー思うw

25 :
Mについてはそれなりに構築できるけど、
そこにVを被せるときに毎回苦労するんだなー

26 :
対象領域の課題を解決するためのモデルの「対象領域」の部分を拡大解釈しすぎなんだよ。
MVVMの文脈で、プレゼンテーションパターン以外の個別のアーキテクチャやパターンとして語るべき物までひっくるめてドメインモデルと言ったり、
ひいては状態を持っているるからドメインモデルです(`・ω・´)キリッ、みたいな事を言っていても、世間一般の同意は得られないと思うけどな。

27 :
いやいや、MVVMパターンの目的はXAMLアーキテクチャ特有のプレゼンテーションロジックの解決がメインであって、モデルの問題は二の次以下なんだがな

28 :
だからMについては一切語らない、っていうのは別に良いんだけど、それでそんなに語る事がある?、っていう。
まあ、VMとMの接続パターンについてはまったく語らないわけにはいかないだろうけど。
DBの話が知りたいって言う話が出てくるのも、DB実装固有の話がどうのというのではなくて、VMからサービス層とかへの参照を誰が生成してどう設定するのとか、
サービスロケータ的な部分をどうすべきかを知りたいって事だと思っているけど。

29 :
それはアプリケーション(Model)の役目だろうよ
V&VMはむしろ生成される側だと思われ

30 :
簡単に言えば
V 見た目
M 本処理
VM 接着剤
だろ
MVCと同じようにUI層とその他を分けるときどうするかっていうのをパターンにしてるわけで
UI以外の処理、例えばデータの読み書きがどうこうなんてのはMVVMには関係ない話だな
Modelって名前なんだから何々であるべきなんだ!!1なんて話はナンセンス

31 :
その「アプリケーション(Model)」っていう言い方も微妙だが…。
生成されたVMがMをどう参照するかは、VM自体の話というよりアプリケーションインフラの話というならそうだけど。
でも、その話すらしないのだとしたら、本当に何の話をするんだ?

32 :
ザックリ分けると
・DBとのやり取りやAsync、Rxなど含めたアプリケーションロジック的な部分。
・MVVMとしての各画面の作り方の部分
・Prism的にDIやサービスロケータ含めたクライアントアプリとして構造的な部分
って感じかね。

33 :
>>30で良いなら、それがもう結論じゃん。それ以上なにか言うことがあるの?

34 :
>>33
>>30の話だけでナイスなWPFアプリが作れるんだったらいいんじゃないの?

35 :
MVVMの実装に関する話ならいくらでもできるんじゃね

36 :
むしろそちらの方を知りたいという人間多いんじゃね?
MVVM的に考えるとコマンドはVMに置くべきか否か
コードビハインドとイベントハンドラとVMの関係
コードビハインドはいわゆるプレゼンターか否か
バインディングとMVVMは切り離して考えるべきか否か
MVVMとしてふさわしいVMの実装は
もっと高速にVMを実装する方法はないかとかね

37 :
あとMVVMツールの良し悪しや使用方法についてとか

38 :
ビヘイビアってよく聞くけどVMに入るの?

39 :
>>32みたいな、アプリケーション構造の話をするのはこのスレではあり?、なし?
MVVMフレームワークの実装比較の話は俺も聞きたいな。

40 :
定義論にまた脱線しない限りまあいいんじゃね

41 :
>>39
むしろそのためのスレだろ

42 :
Mっとういか、VVMじゃない部分の話をしだすと荒れる傾向にあるじゃん。
その境界がどこかの確認。

43 :
>>42
新参者だが、荒れるん?
むしろMVVM作る上で重要なファクターだと思うんだが。

44 :
Modelって言う言葉が出るだけで、すぐ定義論と決めつけて、プレゼンテーション層以外のどうでもいい話なんです!、な発言が出てくるから。
その一方で、アプリケーション構造部分までModelという言い方をする人も居るので。

45 :
何度も言うが、MVVMで焦点当てて考えにゃならんのはプレゼンテーション層であって、Modelは二の次だと何度いわせりゃいいんだか
MVVMがXAMLというDSLに極めて特化したパターンだということを考慮せねばならんよ

46 :
本来VとMだけ分離すればいいのだが、XAMLの場合、バインディングを強く意識した設計になっている。
そこでV〜M間に仲介者を設け、V(XAML)、VM(C#)の二層構造とし、VMにViewの状態とModelのデータを保持させて
V〜VM間をバインディングで通信するのがMVVM。

47 :
ほらw
>>45の意見なら、このスレですべきは>>36みたいな話であって、>>32みたいな話は別途
WPF/MVVMおけるアプリケーション構造について語ろう、みたいなスレを立てろって話になるし。

48 :
>>45
それは>>32でいう2つめを見てるだけであって、実際のアプリを作るには1も3も必要だろ。

49 :
>DBとのやり取りやAsync、Rxなど含めたアプリケーションロジック的な部分。
ってMVVMとどう関係あるの?
洋の内外問わず、これについて論じてるMVVMの記事って見たことないんですがw

50 :
>>48
VMとM間の通信は考えなければならんが、M内の構造については別のパターンを導入すべきだろ

51 :
>>49,50
M内の構造はMVVMとは関係ないよ。
でも実際のアプリを作る上ではどこまでをMとするか、そのMをどういう仕組で作るか、それらとV,VM含めたものを紡ぎ上げるにはどうしたら良いか考えないと出来ないでしょ?
MVVMはあくまでもUIを作る上でのパターンであって、実際のアプリはその他のパターンが組み合わさったもの。

52 :
>>51
ああ、ごめん。IDが出ないから流れがわかりにくいなこのスレ
>>49>>47への反論です
>>50も俺だけど>>51と全く同意

53 :
>>46
そもそもVMはV層でしっかりVとMの分離になってるんじゃないか
Mの設計がVMなしにそのまま使える物であればVMの省略もしばしばみられるし

54 :
やっぱり、VVM内に閉じた話だけを扱うスレなのか?、MVVMを使用したアプリケーションの構造まで扱うのがOKなスレなのか?、っていう最初に戻るじゃん。
VMとMの繋ぎは考えるなら、サービスロケータあたりの話からがグレーゾーンになってくると思うけど。

55 :
定義論に発展しない限りどうでもいいと言ったら定義論がヒートアップしてたでござる
定義知りたきゃMVVMでぐぐってろ

56 :
そもそもMVVMってなに?

57 :
>>56
>>2

58 :
Model
アプリケーションのドメイン(問題領域)を担う、そのアプリケーションが扱う領域のデータと手続き(ビジネスロジック - ショッピングの合計額や送料を計算するなど)を表現する要素である。
多くのアプリケーションではデータの格納に永続的な記憶の仕組み(データベースなど)が使われていたり、
サーバが別途存在するアプリケーションではサーバ側との通信ロジックなどが含まれている。
MVVMの概念ではMVCの概念と同様に、データの(UI以外の)入出力は取り扱わないので、強いて言うならばそれらはModelの中に隠蔽されると考えられる
一般的にModelはドメインを担当すると言われるがこの言葉だけをもってModelの役割を想像するのは難しい。
たとえばクライアントサーバモデルのアプリケーションのクライアントアプリケーション側は、そのドメインそのものがプレゼンテーションになっている。
アプリケーションをプレゼンテーションとドメインに分けて考えようとした際にはこの事が混乱の一因となっている。
Modelの役割は、後述するViewとViewModelの役割以外の部分と考えるのが妥当である。

59 :
MVVMの定義自体は、みんなさほど異なる認識を持っているとは思わんが。
それをわかった上で、アプリケーション固有の話が出てくるのをわかった上でアプリケーション構造の話をするか、しないかについて話てるだけじゃね?

60 :
>>58
それってU氏の記述だろ?

61 :
わかりにくいからMVVMをガンダムでたとえて

62 :
>>54
そこまで細分化しても意味ないと思うから、自分はぜんぶ含めていいと思うの(´・ω・`)

63 :
>>61
M=ララァ
VM=サイコミュ
V=ビット

64 :
>>63
なんとなくこれ思い出した
http://d.hatena.ne.jp/hilapon/20120426/1335411488

65 :
スレのあり方を議論するだけで終わりそうだw

66 :
おまえが勝手に思ってるだけだろ

67 :
質問です。
ButtonクリックしてViewModelからWindowクローズしたいんだけど、ViewModel側にはどう書いたらいいのでしょうか?

68 :
ウィンドウを閉じる動作はViewで完結しているものなんじゃないでしょうか

69 :
ウィンドウサイズ保存したい

70 :
>68
そうなんですか?わかりました...(´・ω・`)

71 :
>>69
コードビハインドで実装すればいいよ

72 :
>>68
未保存のデータがあるときだけ確認メッセージを表示とか、Viewだけじゃ完結しないだろ。

73 :
LivetのMessengerクラス使えば、ViewModelからWindow閉じたり最大化・最小化を操作できる
http://d.hatena.ne.jp/hilapon/20111108/1320728308

74 :
よし分かった、俺がこれがコードビハインドだって
お手本のプログラムを作って見せてやるよ。

75 :
>>73
他のMVVMツールにも同様の機能はありますか?

76 :
>>75
その部分だけパチってくればいいじゃん。

77 :
ugaya40さん、MVVMの本書いてよ。

78 :
彼は文書よりもLivetのチュートリアルの優先度をあげるべきだろ。

79 :
チュートリアルないと使えないか?
サンプルなら探せばそれなりにあると思うけど

80 :
使える使えないという話ではなく、広くアピールしたいならそういう地味な作業の優先度の方が高いんじゃないの、という話。

81 :
ugaya40さんって誰?と思ってこれを読んだけど
http://ugaya40.net/wpf/mvvm-mvc-mvp-pm-eventdriven.html
MVPとPresentation Modelの認識がおかしいな
まぁ全体として意味は通じるけど…

82 :
ところで、これってMVCとどう違うの?
MVCのときとMとVも当然違うと思うんだけど。

83 :
u氏の言っていることは、VVMや実装の話についてはほぼ同意だしすごいとも思っているけど。
ただ、そこからMよりの話やもっと大きな構造の話になってくると、言っていることが微妙というか、
言おうとしていることはわかるけど、他の人の同意は得られないだろうな、っと思うことが多いかな。

84 :
Livet使ってるけど2chの名無しに返信しないで欲しい、とだけ言っておきたい

85 :
Livetネタは荒れるからやめろ。
本人に直接聞け。

86 :
>>77
そんなニッチ層向けの本書いても売れないだろ

87 :
MVVMってどれがええの?
Livetがオススメ?

88 :
mvvmlight

89 :
それはプログラミングにどの言語がいいのかと聞くようなもので
PrismもLivetもMVVMLightもどれも一長一短だからな
人に聞けばたぶんバラバラに返ってくるだろうから
一度使ってみて使いやすいのを判断したほうが早い

90 :
>>81
どの辺が認識おかしいの?

91 :
>>89
そういうんでは、その一長一短を聞きたいんだろ。
ぜんぶ試すってのはなかなか難しい。

92 :
>>86
いや、結構売れるかも知れんぞ。

93 :
VMへのサービス層のDIってどうやるべきものなの?
それ以前に、VMとMを繋ぐ方法として、VMにサービス層をインジェクションする、っていう考え方はあってる?

94 :
>>93
時と場合によるんだろうけど、そうするとMでやるべきのがぜんぶVMに来ない?

95 :
>>94
自分が想定したのは以下の様なサービスファサードがあったとして。
interface HogeServeiceFacade
{
IE<Foo> GetFooList();
}
HogeServeiceFacadeの実装の中では、外部サービスにアクセスしたり、ドメインモデルによる処理をしたり。
HogeServeiceFacade自体はバッチやWebでも使うものだとして。
ここがファサードになるので、それ以上Mの処理がVMに来ることは無いと思っているんだけど。
っで、このHogeServeiceFacadeとVMを接続する方法にコンテナ/サービスロケータを使う場合に
どうするのかとか?、それって考え方としてそもそもあっているの?、っていうのを聞きたかった。

96 :
>>95
そういうんではありなんじゃない?
そもそもMVVMは大本はViewとMの分離があって、それにさらに薄いVMいれると更にセパレーションで来て良いよねって話だから。
で、ロケータ使う場合色々あるけど既存の使うか自前で作るかじゃない。
薄いやつなら実質ただのKeyValueで出来るだろうし、それで結構まかなえると思われ。Prismとかはその辺も実装されてる。DIがより良くインテグレートされてる。他は知らん。

97 :
コンバータ(IValueConverterを実装したクラス)はMVVMのどの層に属するものなの?

98 :
>>97
View

99 :
コンバータ自体簡易VMみたいなもんじゃね?

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
電卓作る (223)
文字コードの種類は何故複数あるのでしょうか? (346)
OpenCLプログラミング#1 (684)
スレ立てるまでもない質問はここで 124匹目 (551)
【モダン推奨】Perlについての質問箱 50箱目 (405)
OpenCLプログラミング#1 (684)
--log9.info------------------
★ノートン★自動引き落とし詐欺★その2 (266)
Java Runtime Environment Part3 (325)
bbs2chreader/chaikaスキンスレッド part6 (966)
ファイルバックアップ比較お勧め総合スレッド Part7 (502)
ImageViewURLReplace.dat(Nida・Style専用) 1 (868)
【サイト取り込み】WeBoX part6【ダウンロード】 (463)
【Vorbis/FLAC】Ogg統合18【Theora/etc...】 (685)
IrfanView Part11 (395)
気軽に「こんなソフトありませんか?」Part.153 (672)
Mozilla Firefox 拡張・アドオンリスト晒しスレ 4 (619)
AnyDVDって どない? (623)
【トリップ検索】MERIKEN's Tripcode Finder その2 (512)
動画キャプチャソフトについて語るスレ 5 (661)
【2層→1層圧縮】DVD_Shrink Part3【質問OK】 (886)
jFD2 (675)
ClockLauncher part5 (664)
--log55.com------------------
【セブンイレブン】加盟店オーナーら 営業見直しなど求め新団体 営業時間を短縮するストライキを計画
【国際】タイ拠点の振り込め詐欺グループ15人 日本に移送し逮捕へ
【研究】「糖質制限」で寿命2割縮む 東北大が発表★3
【鉄道】西武新宿線「幻の複々線化」正式に中止へ 「無期限延期」から四半世紀
【ダム枯渇】空っぽダムの湖底に降り立ち、勝手に散策する人が続出し大問題に。そもそも立ち入りNG。愛知県の宇連ダム
【老人ホーム暴行死事件】祭り好きの父、娘は「施設に入れてごめんね。品川神社のお祭り、行きたかったよね」「若い男に蹴られた」とも
【皇位継承】#衛藤晟一 首相補佐官「戦後に皇籍離脱した旧皇族の皇籍復帰を検討すべき。安易に女系天皇への道を開くべきではない」★5
パン業界に激震 山崎製パン「イーストフード・乳化剤不使用」表示の是非★2