MVVMについて語ろう

■ このスレッドは過去ログ倉庫に格納されています
2012/06/06(水) 11:03:33.21
WPF/Silverlight/WinRT開発の必須技術、MVVMについて語ろうではないか!
2012/06/13(水) 13:37:22.90
2chの煽りと変わらんだろw
ugayaはこういう説明の仕方を見習うべき
www.global-webnet.net/blogengine/post/2010/02/05/MVPVM-Model-View-Presenter-View-Model-the-natural-evolution.aspx
2012/06/13(水) 13:40:07.82
VがVMに密結合してしまってるのが問題だといってたぞ。
U氏も遷移を切り離すならしっくりくると書いてある。

VMから遷移を切り離したら何が残るの?
Viewにプロパティを提供する入力検証の一部をする位じゃないの?
2012/06/13(水) 13:46:36.47
>>155
VがVMに密結合するのはコードビハインドな
それをPに切り出してPを差し替え可能にしてるから密結合しない
2012/06/13(水) 13:47:19.86
Viewで相互運用使うならMVPVM有りとの話もあるが、実際作業するとコードビハインドしか逃げようがないんだよなぁ〜
2012/06/13(水) 13:49:10.29
コードビハインドってPじゃねえの?
2012/06/13(水) 15:20:15.29
質問。
VMの第一の目的って、Mの構造をVでバインディングしやすい形に変換した形で持つ事っていうのであってる?

例えば、DBの2次元表の構造を、複雑なViewにバインディングするためLINQで変換する、とか。
なので、Mの構造そのままを表示するようなVだと、VMは単純なラッパに見えてしまう。
2012/06/13(水) 15:27:06.16
Mの構造そのまま表示できる場合においてはVMは不要
2012/06/13(水) 15:45:57.26
実際に作ってみりゃわかるけど
純粋にMのプロパティだけでインターフェースは作れない
タブやエキスパンダの状態とか環境設定とかの話ね

めんどくせぇから全部詰め込むってのもありだけど
無駄に一緒にするのは保守性を悪くする

どうせそこらへんはほとんどラッパなんだから
書くのがめんどくさい部分は全部T4使えとT4
2012/06/13(水) 15:51:40.10
T4使いづらいって印象しかないんだが、なんか間違ってる?
2012/06/13(水) 15:57:40.49
外部のコードジェネレータを逐一呼び出すよりはT4でやった方が楽だろ
複数ファイルの処理が面倒なのはわかるが
2012/06/13(水) 16:36:31.97
>>162
俺も同じ印象だ。

結局MsBuildタスクで、
http://d.hatena.ne.jp/okazuki/20110116/1295166605
の様な属性からコードを生成するようにしたよ。
2012/06/13(水) 17:01:14.95
どうもこうも

ViewModelBase<T>から派生してたら
partialでTのプロパティを全部ラップしてやればいいのさ
簡単だろ?

T4で自分のプロジェクトからリフレクションする方法がわかりませんっていうなら
調べろとしかいいようがないが
2012/06/13(水) 17:10:39.16
リフレクション使ったらVSのプロセス終了するまでアセンブリ掴みっぱなしじゃね
2012/06/13(水) 17:23:42.40
> T4で自分のプロジェクトからリフレクション
このあたりは、みんなどの方法を採用してる気か聞いてみたいね。

俺はWPFのコンパイルプロセスを見習って、
自分自身を一度ビルドしてからCecilでアセンブリにアクセスしてる。

他にも
Cecilではなく普通のリフレクションAPIを使ったり、
ビルドせずにRoslynやNRefactoryを使ったりという方法もあるけど
こっちを使ってる人もいるのかな?
2012/06/13(水) 17:36:11.05
>>166
アセンブリがアンロードできない・・・と来れば、あとはわかるな?

そう、AppDomainの出番だ。
2012/06/13(水) 17:39:54.72
>>168
おい、やめろ
AppDomain芸をよりにもよってT4でとか地獄過ぎる

RoslynはまだCTPだしT4上で現実的なところで言えばCecilだろうな
コード生成じゃなくてポストプロセスでのIL書き換えでよければPostSharpなんかも選択肢に入るが
2012/06/13(水) 18:07:49.37
うん、AppDomainは無い

まだ別プロセスを起動した方がマシ
2012/06/13(水) 20:42:48.42
PostSharpとか使ってやるのがお手軽?
自前でTaskを作ってビルドプロセスに追加する方が良い?
2012/06/13(水) 21:09:57.27
一番手軽なのは某氏のDSL
2012/06/13(水) 21:11:07.57
Castle.DynamicProxyでいいわ
コード生成だるい
2012/06/13(水) 23:33:29.53
>>172
えむなうさんの?あれってC#専用だよね?
2012/06/13(水) 23:47:53.09
T4使ったら、少なくともテンプレートのコードが
コンパイルされた結果のアセンブリはロードされるはずだろ
だからもともと別AppDomainで実行されるようになってるから
普通にロードして問題ないんじゃないの?
2012/06/13(水) 23:50:14.79
>>174
VB.NETやF#とか茨の道だし、C#で普通に使えれば問題ないだろ?
2012/06/13(水) 23:51:37.83
必要ならVB作れってCodePlexかBlogでリクエストすればいい。
まさかJavaScriptやF#じゃないよな。
2012/06/14(木) 00:07:25.99
リフレクションでやるんならわかるけど、いちいちDSLでプロパティ定義するんだったら
public virtual int Hoge { get; set; }
としといてCastleのDynamicProxyで変更通知を自動実装させればいいと思うよ
2012/06/14(木) 00:14:39.91
>>176
VB.NETは茨の道でもなんでもないんだが?
2012/06/14(木) 00:16:41.28
>>178
プロパティ追加・Hoge・int の3ステップでできる。
赤シャツの嫌いなAOPで実装することもあるまい。
2012/06/14(木) 01:42:25.17
VB続けたい奴がXAMLに手を付けるのが不思議だわ
2012/06/14(木) 08:06:59.93
>>181
それは偏見。いまのVBはC#と比べて大差ない程機能強化されとる
2012/06/14(木) 09:14:33.85
>>176
むしろすべてF#で作りたいんだが。
VMまではF#でやってる。
2012/06/14(木) 13:20:58.33
MS自身はVBにも力を入れてるけど、周りが付いてきていない。

サンプルがC#でのみ提供ってのもよく見るし、
MonoはVBコンパイラを非サポートにしつつあるし。
2012/06/14(木) 13:24:58.84
F#は面白そうだね。

計算式で上手くリアクティブプログラミングができたら
相当VMが作りやすくなりそうな予感がする。

けど、茨の道には違いないだろう。
IDEの支援は弱いし、ライブラリの中にはC#の文法で使うことが前提のようなものもあるし。
2012/06/14(木) 20:01:18.03
VBにいくら機能を追加しても言語仕様が腐ってるから駄目だよ
それにどうせ新機能が増えるたびに「冗長な予約語導入→C#より利便性が下がる」って悪循環でしょ
2012/06/15(金) 01:35:08.89
VBのラムダ式とか狂った文法だし、機能面だけはC#と対等にしてるけど、もはやボロボロでしょ
2012/06/15(金) 10:44:01.68
言語がどうの以前に、MVVM的インフラとして
他人のコードが重要になるから少数派は厳しい
2012/06/15(金) 11:55:14.41
>>186
予約語増えるたびIDEが支援強化するからあまり不便に感じないのも事実
XAML開発の場合、IDEがどれだけその言語をサポートしているかが最重要
そういう意味でF#は終わってるとしかいいようがない
2012/06/15(金) 13:19:16.42
VBはVB2005のように、厨言語と呼ばれてもいいから
VBらしさを重視していた頃のほうが健全だった
C#のクローンに成り下がったVBに存在意義はもう無い
2012/06/15(金) 13:53:34.63
>C#のクローンに成り下がったVBに存在意義はもう無い

そんなことばかり言うからC#厨は嫌われるんだよ
おまえが存在意義感じなくても俺には必要なの!引っこんでろタコ!
2012/06/15(金) 13:55:47.35
VBはクラシックVBとの互換性を維持したいのかしたくないのかよくわからないはじまり方をしたのが最大の失敗だったな
せっかくのしがらみを捨てる最大のチャンスを逃してしまった
2012/06/15(金) 13:56:55.90
>>191
でもまぁ今から.Net始める場合はVB.NetじゃなくてC#選ぶんちゃう?
2012/06/15(金) 13:59:50.60
>>192
言語チームは切りたかったらしいが、マーケット部門から横やり入れられたらしい
とはいえVB6との互換部分は無視すればいいだけの話。実際MVVMアプリ開発しててなんの支障も感じない
2012/06/15(金) 14:00:50.13
>>193
VB.NETに移行する案件、山ほどあるんだが
2012/06/15(金) 14:37:26.30
VB6開発者と共にMVVMプロジェクト移行とか素敵すぎるな
2012/06/15(金) 14:51:15.90
>>196
でしょw でも変にForms覚えてる奴より

「こ れ が .NET じ ゃ 定 番 だ か ら」

と言えば、素直に話を聞いてくれるのから嬉しい
2012/06/15(金) 14:59:21.72
Forms直に行ってデフォルトインスタンス触られるよりいいのか
2012/06/15(金) 15:15:25.52
>>194
開発に使う分には問題ないが、言語チームがかなり苦労してそうなのが構文とかからにじみ出てくるぜ・・・
2012/06/16(土) 04:16:43.61
VB(.NETじゃない方)も未だに元気だからなぁ
PHPがじわじわ下がってきてVBと逆転してしまった。
今はまだ一時的な物だけど今後数ヵ月かけて順位が入れ替わりそうだとか何とか。
http://www.tiobe.com/index.php/content/paperinfo/tpci/
2012/06/16(土) 12:32:05.90
実はMVVMってしっくりこないんです!

わたしはこれまで、C/C++、Visual Basic、最近になって Java、C# などの言語を使ってきた。
「自分でViewModelを作ってMVVMっぽいことをしている」なんてことはまったくない。

特に「Visual Studioでポトペタ開発ができる」ということ知ってからは、従来のVB6のように開発している。

共有変数も、pubulic staticで宣言する。したがってプロパティなんて作らない。

自称上級者のコードを見ると、いちいちM・V・VMのクラス分けをしているので笑ってしまう。

データベースにアクセスするアプリケーションをを書いているのだが、Visual Studioが供給している
機能を使えばMVVMなど使わなくてもできてしまうのだから。
2012/06/16(土) 12:40:31.71
なにおじさん?
2012/06/16(土) 13:20:33.52
何のコピペだっけそれ
2012/06/16(土) 14:14:46.22
懐かしいなw
2012/06/16(土) 17:03:22.48
オブジェクト指向か
2012/06/16(土) 17:52:59.93
VMのコストが高いのは事実
2012/06/16(土) 23:27:28.75
Livet で Drag and Drop やりたいんだけど、どこかにサンプルないですか?
2012/06/17(日) 11:27:52.39
時間の無駄だと思わないの?
お前がMVVM教の修験者か何かでないならコードビハインドを使え
2012/06/17(日) 14:45:06.19
Dropイベントを処理したいだけなら>>139-140
2012/06/17(日) 16:08:05.74
イベントだけ拾っても仕方ないでしょ
素直にコードビハインドを書くか、
Dropイベントを受け取って引数にデータ入れてバインドしたVMのコマンドを呼ぶ
ビヘイビアを作りましょう
2012/06/21(木) 18:57:52.75
MVVMって誰が提唱しだしたの?
2012/06/21(木) 19:34:30.00
MSの中の人
2012/06/21(木) 19:36:38.56
ビヘイビアに書くと再利用性が上がるってだけで中身はコードビハインドと大して変わらんしな
まあD&Dはどっちにしても面倒だが
2012/06/21(木) 22:54:05.30
コードビハインド書くと、VからVMアクセスするでしょ?
それがかっこ悪いのよね〜
2012/06/22(金) 23:26:34.40
VからVMにアクセスするのはコマンドも一緒だと思うが…
2012/06/23(土) 07:54:12.87
つーかほぼすべてVからVMへのアクセスだろが。
2012/06/23(土) 09:25:51.09
VMはVを知らないがVはVMを知っている
2012/06/23(土) 11:10:17.65
こんにちは!VMさん。
あなたは、Vさんにフォローされてます。

Vさんをフォローしますか?
 する
→しない
2012/06/23(土) 11:29:14.41
MVCのCとMVVMのVMって何が違うの?
データを扱うMと画面を扱うVがいて、それらを制御するCでしょ?
VMもCもいっしょじゃん。
2012/06/23(土) 15:06:23.66
>>219
ASP.NET MVCを想像してみろよ

あれはCとVMの両方を持つが、どう見ても同じものじゃないだろ
2012/06/23(土) 15:13:22.96
>>220
それが理解できていれば聞かずに済んでいるんだ、無能ですまん。
2012/06/23(土) 15:30:26.15
VMってのは、Vから扱いやすいインターフェイスを備えたMのラッパーだよ
Vを制御したりなんかしない
2012/06/23(土) 15:57:05.63
Vを制御するのは誰?
簡単な話、Viewにある文字をModelでなんかした結果で変えたいみたいな。
2012/06/23(土) 16:02:41.88
V自身がバインディングで変える
2012/06/23(土) 19:19:17.03
MVCだとVは入力を扱わない
2012/06/24(日) 17:03:07.28
Mの状態でフォーカス位置を変えたりするのがめんどい
2012/06/24(日) 17:04:30.15
SとMの関係を一言で言うと?
2012/06/24(日) 18:36:15.75
rot(M, -π) = S
2012/06/24(日) 21:45:32.65
Vを制御するのはVMだろ
Vの状態を持つためのMなんだから
2012/06/25(月) 14:05:28.44
VMがVを制御しないんならVを制御する別のオブジェクトが必要だな
そうだなープレゼンターとかいう名前にするといいんじゃね?
2012/06/25(月) 15:04:10.95
「MVVMパターンで学ぶGUIアーキテクチャパターン」? .NETラボ勉強会で話してきました!
http://ugaya40.net/architecture/mvvm_to_mvc.html
2012/06/25(月) 18:19:46.52
Mのプロパティをラップすることがあるのは、MVVM関係なく、隣人とだけ話せっていうOOPの作法だよな
MVVM的には別にどっちでもよくて、やっぱりVMの本質はVの状態を持つことだよ
2012/06/25(月) 22:39:40.76
従来のウェブアプリ(Ajaxアプリ除く)、
ウェブフレームワークといったらいいかな?

で、MVVMを使うメリットある?
2012/06/25(月) 22:50:54.35
JSのか?
2012/06/25(月) 22:54:54.79
JS関係なくて、普通のフォーム使った
ウェブアプリ。
2012/06/26(火) 00:01:38.39
数ある既存の素晴らしいMVC系フレームワーク(あくまでWebでいうMVCね)
に乗せられるというメリットを捨ててまで使うほどのメリットは無いと思う
2012/06/26(火) 00:15:01.78
ASP.NET MVCにはViewModelと呼ばれるものがあるけど
ステートレスでただVと1対1なだけのデータの入れ物だからMVVMとは別物だと思う
2012/06/26(火) 00:17:39.51
MVVMはVが入力を扱う場合において威力を発揮する
WebのサーバサイドだとVは入力を扱わないし、MVCはVではなくCが入力を扱う
2012/06/26(火) 00:20:17.19
あと選択状態とかだろ
ステートレスなVMはただのMだ
2012/06/26(火) 00:41:58.72
そもそもウェブアプリってMVCじゃないだろ?
データとってきてテンプレートに入れるだけじゃん。
2012/06/26(火) 19:38:03.37
何を突然スレ違いなことを
2012/06/26(火) 20:46:48.60
>>233でウェブアプリの話してるじゃん。

ちゃんと読まないでレスするの良くないよ。
2012/06/26(火) 20:53:00.50
ここはMVCのスレではないし、クライアントとWebのMVCが同一だと言ってる奴も居ないけど
2012/06/26(火) 20:57:02.48
このスレの1/10には
MVCという単語が含まれているが?

MVCのスレじゃなくても
MVCと比較するのだからなんの問題もないだろ。
2012/06/28(木) 18:23:25.38
コミュ障って生きていくの大変そうだな。
2012/06/29(金) 00:08:52.57
そうだな。そういうことにしておけば?
2012/06/29(金) 14:32:07.81
そこはもちょっと親身に相談に乗ってあげなきゃ
245が自殺でもしたら大変だろ
2012/06/29(金) 15:32:22.10
ちょっと死にたい
2012/06/29(金) 16:26:05.86
コードビハインドさえ書かなければ死なない
2012/06/29(金) 17:17:54.12
いや、別に責務さえはっきりしていれば、別にコードビハインド書いてもいいんだよ。
MVVM≠コードビハインドはよくある誤解なので、ご注意を。
2012/06/29(金) 20:05:40.23
>>250が≠の意味を誤解しているのは分かった
2012/07/01(日) 09:58:01.85
LivetってPrismにあるようなナビゲーションスタイルのアプリケーションには対応してないよね
アホみたいに時間かかってる割には全体的に…
2012/07/01(日) 10:29:40.96
お前は何を言っているんだ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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