MVVMについて語ろう

■ このスレッドは過去ログ倉庫に格納されています
2012/06/06(水) 11:03:33.21
WPF/Silverlight/WinRT開発の必須技術、MVVMについて語ろうではないか!
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
お前は何を言っているんだ
2012/07/01(日) 10:44:49.81
>>253
ウインドウ内で画面遷移するやつ(PrismのRegionみたいなの)
できるなら教えてほしい
2012/07/02(月) 02:00:05.07
個人製作のフレームワークがごく限られたケースにしか対応してないのはよくあること
配慮してくれないと
2012/07/02(月) 17:16:37.30
ContentControlでも使ってろ
2012/07/04(水) 01:06:26.25
Livetの中の人、ついったーがキモい・・・
2012/07/04(水) 01:21:34.90
WebMVC
http://d.hatena.ne.jp/yojik/touch/20091019/1255963600
2012/07/04(水) 10:36:51.30
>>153みたいなことしちゃうアレな人だからな
2012/07/04(水) 15:31:22.65
いやなら反論してみればいいんじゃね
2012/07/04(水) 15:43:14.21
例の人は目先の細かい実装に囚われすぎなんだよ
>>154で説明されているような
・VMをビジネスロジックに依存させないことによるVMの再利用性の向上
・VをVMに依存させない(つまりVMを直接触るようなコードビハインドを書かない)ことによるVの再利用性の向上
・Pは差し替え可能
・DIとの相性
と言ったことに全く触れられていない
2012/07/04(水) 15:56:30.88
直接言って来いよ
ここでやんな
2012/07/04(水) 18:25:12.71
技術的な話はここでいいだろ。

性格批判は向こうでどうぞ。
2012/07/04(水) 18:36:48.98
そうそう、そのためのスレなんだから

MVPVMのサンプル見ると、三つのプラットホームでVMを共通化してる
VとVMの疎結合のためにPを設けてるわけだが、
現実的に考えると、VMの共通化を図る要件って実際あり得るのだろうか?
2012/07/04(水) 18:44:57.68
>>154のリンク先の例にあるような、同じV-VMペアを別の用途で使いまわすっていうのは
割とあるんじゃないかと思う
2012/07/04(水) 19:12:57.94
VMの共通化は無い派。
デバイスが変われば見た目も変えたくなるし、全てのデバイスで使えるスーパーセットのVMもどうかと思う。
Mが可能な限り共有できればそれでよいと思う。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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