MVVMについて語ろう

■ このスレッドは過去ログ倉庫に格納されています
2012/06/06(水) 11:03:33.21
WPF/Silverlight/WinRT開発の必須技術、MVVMについて語ろうではないか!
2012/11/12(月) 23:25:58.38
>>416
俺は複数のWindowでControl使いまわしてるから、Controlに専用のViewModel持たせてるよ
2012/11/13(火) 00:54:12.58
Model側でコレクションを持つ場合、そのVMも子ModelのVMのコレクションを持つようにしてるかな
この場合Model側もObservableCollection的な通知機能付コレクションを使うことになるが
子ModelがVM持つほどの意義がない場合は親Modelのコレクションそのまま使ったりもする
2012/11/13(火) 04:42:27.67
414は単純に、「別のコントロール」側のItemsSourceになってるコレクションに
Addしてやればいいだけだと思う…
単純過ぎるので質問の意味取り違えてるかも知れないけど

416についてはケースバイケース
どうするのが、開発や保守しやすいか。それ次第でしょう
420414
垢版 |
2012/11/13(火) 20:36:52.73
昨日はレスいただいたのに返事できずにすみません

>>417-418
コントロールは再利用するつもりなので、今回はコントロールにVM持たせてみます
子もVMに入れてみようと思います
2012/11/13(火) 20:43:05.86
>>419
1. ItemSourceになっているコレクションに誰が値を入れるべきか?
2. ItemSourceは誰が持つべきか?
の2点で悩んでいました

Page AとBを持っている親Window
 A 全てのオブジェクトをリスト表示するコントロール
 B Aで選択されたものを1つずつ追加してリストに表示するコントロール
となっています。
ABはそれぞれ再利用を考えているため、個別のVMを持ち、子のVMは親のVMが持つ事としようと考えています
なので2.についてはBで持つ事にしようと思います

まだ悩んでいるのは1.でして、今のところの実装は
1) AのListのSelectedItemをAVMのプロパティにバインド
2) PageVMでAVMのPropertyChangedイベントをハンドリング
3) PageVM内のロジックでBVMで定義したAddItem(自作)を呼び出す
4) BVMのAddItemメソッドないでObservableCollectionに追加
としています。
この中の2)の部分が特にしっくりこなくて気持ち悪いというのが、質問させていただいた経緯です
2012/11/13(火) 21:27:06.52
>>421

あまり参考にならないかもですけど、
もし俺が、そういうPage,A,Bの3つのVMでやるとしたら

Aのコンストラクタの引数で、デリゲートを受け取れるようにしておく
AではPropertyChangedのハンドラで、その受け取ったデリゲート呼ぶようにしておく

PageからA,Bをインスタンス化する際に、
BのAddItemを呼び出す処理や、Pageでやるべき処理もあればまとめて、
Aのコンストラクタに全部、ラムダ式で渡す

これで後は、AのPropertyChanged内だけで、PageやBの処理も全て完結

って感じにするかな…。
2012/11/13(火) 21:40:19.58
>>422
ふむふむ、なるほど

レス読ませてもらって考えているうちに思ったんですが、AVMにItemが選択された
ことを通知するイベントを定義して、そこにラムダ式突っ込んであげれば良いのかな?
って気がしてきました

何が気持ち悪かったって、AVMにはほかにプロパティもあるわけで、PropertyChangedを
ハンドルしていると、別にPageには興味がないプロパティも飛んでくるわ
プロパティの名前をAVMで定数定義してAVMからもPageVMからも参照しようとすると、
MVVM Light ToolkitでVMのインスタンスを生成するときにエラーで落ちちゃって
プロパティ名をAとPageの双方に文字列で指定してた所なんで、一番キモイ所は解決された気がします

ただなんか手法が古臭いような気がしないでもないですがw
XAMLでこう書いてああ書いてすればサクっとできちゃうよ!的な解決策はさすがにないですよね?w
2012/11/13(火) 23:15:36.04
@ugaya40: 難しいとかいってる人はコードビハインドでMVVMしましょ


コイツ、MVVMでコードビハインド使うのはMVVMを理解していない無能のすること とか散々ほざいてたくせしてなに言っちゃってんのって感じなんだが。
「難しいとか言ってる人」とかつけ加えてて誤魔化してんじゃねーよ。
難しいとか難度の問題じゃないってわかんねーのかな?
2012/11/13(火) 23:18:09.19
コードビハインドを使用したものは神の怒りに触れ
永久にメモリリークの責め苦を受けるんじゃなかったのかw
2012/11/13(火) 23:23:22.77
テンプレートにハンドラつけた場合じゃねそれ
2012/11/13(火) 23:28:45.74
自作のライブラリーをコードビハインドに対応させるって言ってたし完全に方向転換したんじゃないのかな?
それ自体はいい事だとは思うけどね
ただ、間違った持論でMVVMの概念をめちゃくちゃにした罪は大きいよね
きちんと間違ってたことを認めればいいけど、あの歪んだ性格じゃ無理だろうな…
2012/11/13(火) 23:33:30.98
必死にPSDって略語を流行らせようとしてるのに誰も使ってないのが泣ける、というか笑えるw
2012/11/13(火) 23:39:32.37
PDS言ってるのは知ってるがPSDは知らんな
430デフォルトの名無しさん
垢版 |
2012/11/13(火) 23:40:55.84
DPSならしってる。全部知ってる。DPS全部
2012/11/13(火) 23:43:51.07
社内ではよく使うがネットで使う機会が無い
2012/11/13(火) 23:45:32.47
本人もあれだけど最近はアンチのがウザいな
直接煽られたことある人はそうなるのか
2012/11/13(火) 23:50:31.04
面白がってアンチに乗じてアンチごっこしてるやつが一番うざいし役に立たない
2012/11/14(水) 00:37:00.22
MSの将来が不安なのでAndroidのMVVM環境教えてください
435デフォルトの名無しさん
垢版 |
2012/11/14(水) 00:42:27.62
JavaScriptでよければ
KnockoutがMVVMのフレームワークだよ
2012/11/14(水) 00:47:11.25
Androidでバインディングは無理だと思う
コントロールがそれぞれ独自にXML読むクソ設計なんだぜ?w
2012/11/14(水) 00:59:28.17
AndroidのフレームワークでバインディングやるならActivityのコード側でsetBindingみたいなメソッド呼んで
実装はリフレクションで頑張るしかないだろうけど
そんなことするくらいならPassive Viewの方がいいと思う
2012/11/14(水) 01:13:42.40
さすがに今年中にBlend出してくれんとしんどいわMSさん
2012/11/14(水) 01:24:18.30
Expression Studio 5まだー?
2012/11/14(水) 02:03:13.02
android binding があるでしょ
2012/11/14(水) 21:26:33.41
@ugaya40: 俺はWin8デスクトップにはスタートメニューが必要だと思うけど、シノフスキーさんの辞任と現時点で結びつけたりするわけもなく。ただその反対意見もまた極端なのが散見してるな。どっちもアホじゃないですか。

散々、極端なことを言ってたのはお前だろ?w
自分で自分がアホって自覚がちゃんとあるんだな。
2012/11/14(水) 21:27:50.23
>>426
メモリーリークするの?
メンドクサイからテンプレートから呼ぶようにしたんだけど・・・
2012/11/14(水) 21:49:40.33
>>441
お前さん、うがやのこと大好きなんだな
2012/11/14(水) 22:08:23.42
そのうちVSスレのキチみたいに発狂しちゃうんだろうな
2012/11/14(水) 22:12:55.52
さすがに粘着が過ぎる
2012/11/14(水) 23:17:24.64
まぁ、こういう個人攻撃はネットウォッチ板でやるもんだな
2012/11/15(木) 10:53:44.15
>>442
そんなことでリークするわけない。動的に生成された要素は、XAMLでイベントハンドラが登録されたままでも
ツリーから外れた時点でGC対象になる。XAMLではなくコードビハインドなどから追加した場合は当然
WPF管理外のため、イベントハンドラによる強参照が当然残るのでそれがマズい場合があるだけ。
つまりWPF自身の問題などでは決してなく、あくまで愚かな人間によるミス。
例の宗教はあえてそのあたりをぼかす(信者の多くはそもそも理解してないまま復唱してるだけだろうが)
ことによって恣意的なイメージ操作を行っている。
2012/11/15(木) 10:57:08.02
そもそもWindow自体を解放する手段ないだろ
449447
垢版 |
2012/11/15(木) 11:01:14.57
ItemsTemplate/DataTemplateの中のコントロールのイベントに対して
コードビハインドのイベントハンドラを登録したときの話な
試してみたら分かるが、要素を削除した後にGCが走れば
ちゃんとコントロールのファイナライザが呼び出される。
2012/11/15(木) 11:25:23.41
メッセージに応答してダイアログを開いたりする汎用的なビヘイビアって本当に必要?
VMからダイアログ開きたいんだったら、IoCでVMからIOpenFileDialogServiceのような
インターフェイスを通してメソッドを呼び出せばいいだけの話だと思うんだけど。
わざわざメッセージ投げてVで処理するなんて複雑だしXAMLも無駄に汚れるしタイプセーフじゃないし。
特定のビューでしか使わないようなサービスにするまでもない処理ならメッセージもアリだと思うけど
その場合ビヘイビアにする意味はなく(再利用しないんだから)、コードビハインドで受けて処理すればいい話だよな。
2012/11/15(木) 17:05:54.35
テスト
2012/11/15(木) 20:05:32.67
行き過ぎたBlend主義。
俺もサービスにするかな。
2012/11/15(木) 22:36:46.09
VMからのメッセージでアニメーションを開始させたいときなんかにはビヘイビアが便利かも
と思ったけどそんなビューの細かいことをVMで意識するのも本末転倒な気がするな
そこはメッセージとXAMLは直接繋がないと割り切った方がいいのかも
2012/11/15(木) 22:46:23.39
俺はビヘイビアで済ませたほうが楽かな
2012/11/15(木) 22:52:24.24
Livet教のMVVM…ドカタMVVM
IoC使うPrism系のMVVM…JavaっぽいMVVM
2012/11/15(木) 23:15:07.41
MVVM Light…光のMVVM
2012/11/17(土) 00:05:50.69
よく話にでるlivetってライブラリ落としてみたけどクラス名にまでlivetって入ってんのね。
ダサすぎる。
2012/11/17(土) 00:08:09.15
てゆーか、9割以上がPrismとMVVM light toolkitのパクリコードってのはどうなの?
Ugayaはずいぶんえらそーなことを言ってたがただのパクリライブラリじゃんか。
2012/11/17(土) 06:32:58.08
そうだなC#はJavaのパクリだもんな

つーかソース見たことはないが本当にパクリなら大問題だしそれならここで言ってないで大々的に批判すればいいんじゃないか
2012/11/17(土) 09:52:41.30
>>459
見ればわかるがおおざっぱに言えばLivetの独自部分でメソッドキャッシュとT4コンバーターぐらいじゃね?


C#っつーか.NET Frameworkだろ
1.0のころはパクリだったんじゃないの?
実際Javaがなければ今と同じ1.0は生まれてなかった
2012/11/17(土) 10:11:39.47
なんだコード盗用とかじゃなくて概念の話だったのか
2012/11/17(土) 11:07:14.48
>>461
>>458はコードと言ってるな
2012/11/17(土) 12:09:36.74
>>461
綺麗に言えば、車輪の再発明?
ぱくりライブラリと言われても仕方がない代物ではある
何を目的にやってるのか分からないところもあるし

インフラを乱立させたって混乱するだけだし
ドキュメントやサンプル充実させて裾野を広げるってわけでもないし
尾上が自身の狂った思想から少しでもずれてる意見を発見すると
死ぬまで粘着されるしな

尾上は自分が日本での唯一のMVVM啓蒙者になるために
他人がおいそれと語れないようにしてるだけ

完全に癌でしかない
2012/11/17(土) 12:14:26.42
MVVMの土台として画面遷移は極めて重要だと思うが、そこがいい加減なのはいただけない
同期ダイアログによる遷移のみってWinFormsかよw WinRTじゃそんなもん使えないぞ?
2012/11/17(土) 12:30:02.96
>>464
MVVMはMSが本気で取り組まない限り無理。
言語、.NET Framework、IDEが三位一体で対応しないと今はまだ欠陥が多すぎる。
2012/11/17(土) 12:38:05.90
>>465
WPF自体は様々な画面遷移のシナリオを実現するのに十分な機能を備えてるし、
IDEでどうするもんでもないだろう
Prismは画面遷移かなり頑張ってるぞ? というか画面遷移をまともに扱ってるのはPrismだけ。
2012/11/17(土) 13:33:39.79
U氏に親殺されたやつ多すぎだろ
2012/11/17(土) 14:04:28.46
>>467
叩かれてる奴に「氏」付けるのは本人だけ
ってだいぶ前に小学生の妹が言ってたよ。
2012/11/17(土) 14:08:17.71
画面遷移についてはMVVMと絡めてもっと真剣に議論されるべきだと思うぞ?
U氏関係なく。自称MVVMインフラではたいてい完全スルーされてるが(Livetでもおまけ程度)
どうしてもインフラ的なコードを書くことになる部分だし、MVVM使ってるなら画面遷移の設計も
それに強く影響されることになる。
2012/11/17(土) 14:08:19.65
>>466
> WPF自体は様々な画面遷移のシナリオを実現するのに十分な機能を備えてるし、
WPFの話じゃなくてMVVMな
> IDEでどうするもんでもないだろう
IDEにどれだけ恩恵受けてるかわかってないの?
MVVMだってフレームワークだけではどうにもならないことがある
> Prismは画面遷移かなり頑張ってるぞ? というか画面遷移をまともに扱ってるのはPrismだけ。
Prismがもっと使いやすく標準で.NET Fxに乗らないと無理ってこと
2012/11/17(土) 14:44:14.95
コードビハインド前提のMVVMフレームワークが出てきたら少しは前進すると思う。
Livetがダメなのは作者がコードビハインド完全否定してることと
>>458が言う通り、既存フレームワークの単なる2番煎じで
MVVMの問題点を克服するものではないから。

コードビハインドいいと思うんだけどな。
うがやのサイト見ていると分業とか書いてるが
Vをデザイナーに別注してるチームってあるのか。
デザイナーとデベロッパーの分業なんて幻想じゃないのかな。
XAMLをフルに理解してるデザイナーなんて一人もいないと思うよ。
2012/11/17(土) 14:57:27.23
>>471
その点に関してはすでに奴は考え改めてコードビハインドの有無はどうでもよくなってるみたいだぞ
2012/11/17(土) 15:03:53.77
VMの処理中にユーザの入力を求めたくなった場合とかかね画面遷移は
ぶっちゃけどのライブラリも何かあるたびにクラスやらインターフェイスやら増やさないとならなかったりして面倒だわ
MSはMVVMを推奨するんならASP.NET MVCくらい充実させるべき
2012/11/17(土) 16:41:52.99
>>473
そういう遷移はビューだけで完結するのでほとんどMVVM関係ない。
ビューの実装の詳細だ。
設計に大きく影響するのはVMごと遷移するやつな。
2012/11/17(土) 17:27:45.79
具体的な例で言ってくれよ
2012/11/17(土) 17:34:46.35
例も何も、無理にVMくつけなきゃ 一覧画面 <-> 編集画面 とか大概の画面遷移はVMごと遷移だろ
ダイアログベースならそんなに意識しないだろうけどさ
2012/11/17(土) 17:43:10.77
それならDataContextにVM突っ込んでもらうだけでよくね
2012/11/17(土) 17:54:24.04
そのコードをどこに書くのかとかいろいろ問題があるよ
本来、一覧画面VMで 画面遷移しろ("編集ビュー", selectedItemId); だけで済むはずで
一覧画面のVMやVが遷移先の画面のVやVMのクラスを知っている必要は全くないけど
そう書けるようにするためには結局インフラがいるんだよね
2012/11/17(土) 18:03:52.82
railsのscaffoldみたいにサクッとアプリを作れるようなインフラが欲しい・・・
2012/11/17(土) 19:28:02.12
>>472
どうでもいいわけないよね?
氏のMVVMサイト見てくれば。
2012/11/17(土) 20:46:12.52
プロ粘着なら奴のツイッターも観察すべき
2012/11/17(土) 23:51:38.42
>>481
前はフォローしてたんだけどね。
自分とちょっとでも意見が違うと噛みついて粘着のパターンが多すぎて
ずいぶん前にフォロー解除したよ。
あの人ちょっとアスペ入ってるよね。
ちょっとというかかなり。
高卒で会社員経験なし、ってとこで人間の底が知れるわ。
483デフォルトの名無しさん
垢版 |
2012/11/18(日) 00:01:26.49
と2ちゃんねるで批判するガキwww
2012/11/18(日) 00:03:44.32
>>483
ugayaの負けず嫌いもここまで来ると褒めたくなるなw
せっかく社会人になれたんだから2chで自演擁護とかやめたら?wwwww
2012/11/18(日) 00:09:01.67
>>484
まともな社会人は多少の煽りには反応しねーんだよ
お前みたいな無職のクズとは違うんだよ
分かったらとっとと寝ろ
2012/11/18(日) 00:11:32.55
ugayaは2chの煽りにtwitterやブログでキレまくってたけどなw
2012/11/18(日) 00:17:22.53
>>486
いいから早く寝ろよ
2012/11/18(日) 00:20:54.13
反応はしてたけど別にキレまくってたってほどじゃなかったろ
2012/11/18(日) 00:24:44.54
MVPVMの(Uによる)煽りはひどかった
2012/11/18(日) 01:06:10.42
お前ら本当に暇なんだな
文句があるなら一度でいいからGoogleの検索トップになってみろよ
U氏のサイトはMVVMで検索すると余裕でトップなんだが
2012/11/18(日) 01:10:17.68
そんなんだと宗教に騙されるぞ
U氏も言ってるだろ? 「MVVMだからこうしなければならない」じゃなくて目的を考えろと
2012/11/18(日) 01:14:55.07
>>491
自分の考えた最強の目的しか許さず
その目的を達成するにはこうするしかないと決めつける
そこから外れたツイートを見つけると相手が黙るまで粘着ツイート
相手が黙ると「都合が悪くなると無視かよ、これだからクズは困る」的なツイートで〆

尾上さんのそこにシビれる!あこがれるゥ!
2012/11/18(日) 01:15:09.27
目的を考えろと言ってる本人が一番権威主義を煽ってる元凶という皮肉
2012/11/18(日) 01:19:48.67
尾上を擁護してるのはいったい誰なの?
誰がどう見てもアスペルガーじゃん。

尾上にへこへこ媚び売って家畜に成り下がってる奴って
高野将かぐらばくぐらいなもんだろ?
2012/11/18(日) 01:40:50.56
相手を擁護と認定してしまえばどんな誇大を使って過激に叩いても正当化できて安心だもんな
2012/11/18(日) 01:49:36.48
文句があるなら同じMVVMの土俵で反論すればいいじゃないか。
このスレに持論を垂れ流すだけでも人格攻撃よりはマシだしまともな議論なら歓迎だぞ。
考え方に関してはここはわりとU氏に反発してる人が多いみたいだし(俺もその一人だが)。
497デフォルトの名無しさん
垢版 |
2012/11/18(日) 07:01:25.21
MVVMの思想に関してはいい加減多少は理解したから、
そろそろMVVMの実装について語って欲しいなぁ、
498デフォルトの名無しさん
垢版 |
2012/11/18(日) 07:25:20.92
とりあえずインフラ使っとけっていう風潮?って
MVVMじゃなくてMVVMライブラリの使い方を憶える事になる
危険性高い気がするのよね。

MVVMインフラが解決しているであろう、
様々な問題を自力で解決できるように成らないと
ほんとうの意味でMVVMやXAML環境を理解したとは言わない気がする。

MVVMの啓蒙者ならそのぐらいまでやってくれないと片手落ちだろって思う。



ところでMVVMインフラってどんな問題を解決してるの?
2012/11/18(日) 13:25:29.40
コードビハインドのこともそうだしModelの責務の話もそうだけど
言ってることがコロッと変わるのはどうにかならないものなのか

なんか昨日もフォーカス制御をModelでとか唐突に言い始めるわけですよ
それが正しいかどうかは別として
ざんざん大声で他人を罵倒してまで言い続けてたことを
ちょこちょこ小出しでさりげなく路線変更してくる卑怯なところが俺が気に入らないところ
といういか、それがうがやが叩かれる原因じゃね?
2012/11/18(日) 15:58:45.35
>>499
やっぱ大学もいってないし、会社員としての経験もほぼ0でしょ?
どう考えても性格、人格が歪んでるというか問題があるんでしょう。
完全にアスペだよ、アスペ。
2012/11/18(日) 16:01:06.83
お前アスぺの意味やその性質わからずに罵倒語として使ってるだけだろ
2012/11/18(日) 16:06:22.21
人格の話は別の板でやれ。
2012/11/18(日) 16:17:28.34
私怨ならヲチでやれ
2012/11/18(日) 18:51:48.91
ここって元々WPFスレを正常化するための隔離スレッドだからいいんだよ。
便所の落書きスレッドで。

いやなら見るなw
by 岡村
2012/11/18(日) 18:59:24.39
まあアスペには違いない
2012/11/18(日) 20:26:20.24
尾上さんは
「日本でMVVMを正しく語れる人間は自分以外にいないッ!!」
って断言してたしスレ名を「尾上について語ろう」に修正してもよいと考えられる
2012/11/18(日) 20:52:02.11
ここMVVMやってる奴はキチガイだらけという見本のスレか
2012/11/18(日) 20:58:34.33
そもそもMVVMって何だよ
ぐぐってもクソみてーなサンプルコード乗せただけの記事しか出てこないしまともに概念を解説してるやついねーのな
コマンド(笑)とか冗長すぎてもうね
509デフォルトの名無しさん
垢版 |
2012/11/18(日) 21:04:18.24
わからないならこれでも勉強しろ

JavaScript製のMVVMフレームワーク「Knockout」
http://www.moongift.jp/2010/11/2010110212/
2012/11/18(日) 22:37:36.36
>>508
尾上さんのサイト見れば簡単に理解できる。
簡単に言うとPDS的にコードビハインドを記述しないで開発する手法だよ。
2012/11/18(日) 22:40:25.76
一応言っておくとPDSは一般的な用語じゃないから通じないと思うぞ。
512デフォルトの名無しさん
垢版 |
2012/11/18(日) 22:41:17.17
一般的にはフリーソフトで通じる
2012/11/18(日) 23:36:11.21
>>511
自分が知らないことは一般的じゃないと考える根拠は何だろうね
自分の無知を晒しているだけと気が付かない人には何を言っても無駄ではあるが、助言だけはしておくかな
2012/11/18(日) 23:39:05.83
Wikiにないから一般的じゃないと推定される
2012/11/18(日) 23:40:30.50
どこのWikiだよ
516デフォルトの名無しさん
垢版 |
2012/11/18(日) 23:42:35.17
PDS
http://ja.wikipedia.org/wiki/PDS
パブリックドメインソフトウェア(Public domain software)
かつてのドイツの政党である民主社会党(Partei des Demokratischen Sozialismus)。合併し、現在は左翼党 (ドイツ)に。
FTTHにおけるネットワーク構成(ネットワークトポロジー)の一つ。(Passive Double Star)
毛利元貞が考案した護身術パーソナルディフェンスシステムの略。
テレビ番組の制作会社の名称。PDS (制作プロダクション)を参照。
先駆動システム(Pre Driving System)
プラン・ドゥー・シー(Plan Do See) PDCAサイクルを参照。
アップルが採用していた拡張スロット。(Processor Direct Slot)
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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