Livetの@ugaya40さんにMVVMの責務分割きいてみた
@yfakariya VMの存在理由は仮想化なりコントロールの実装の自由化という別の理由があって存在するものだととらえていますから。プレゼン層がMに感知しないところで勝手にVとVMに分かれているだけだと認識しています。そしたらステートを持たないVにバインドしても意味ないです。
2011-10-22 04:39:05@yfakariya どっちにしろMはプレゼン層と対話しているだけです。プレゼンステートを持つのがVMだからVMがMとの窓口になっているだけだと思っています。
2011-10-22 04:40:42@yfakariya プレゼン層で、ステートを管理しているのはVMですし。本来Vに存在するステートはMVVMでは関知していないはず、つまりないと考えています。
2011-10-22 04:41:58@yfakariya なぜ同じ意味のステートを2重に持つのか?。プレゼンステートとドメインステートは違うものだし、違うものじゃないとプレゼンとドメイン分けられないからです。もちろんVMのステートとMのステートは同じではなく、多くの場合多いですが。
2011-10-22 04:43:24@ugaya40 入力の仕掛状態をViewに置く理由はなんですか? 表示用のステートの保持や合成はわかりやすいと思いますが、仕掛状態は見た目でしょうか、リッチインタラクティブなAPの問題領域とはいえないのでしょうか?
2011-10-22 04:46:51@yfakariya 言えるとは思いますが、それを言うならさきほどViewの出来と先輩がおっしゃったようにすべてリックインタラクティブなAPの問題領域ですよね。MVVMの責務は結局VのコントロールやXAMLの性能がもたらした責務わけだと思っています。
2011-10-22 04:49:37@yfakariya サーバから見れば、リッチクライアント全部Vですし。Mから見ても本来Vだけでいいはずですし。しかしそうはいかないのでこの形で分担しているという認識です。しがかりを現実にMで持つと、入力状態に合わせてVとVMに通知を飛ばす必要が生まれてあれです。
2011-10-22 04:51:53@yfakariya XAMLとその状態で構成されるVとVMでリッチクライアントの問題領域を吸収できる範囲があって、それ以外のところがMである。って感じです。
2011-10-22 04:52:46@yfakariya コントロールの状態と分離されたMには、開発上大変なメリットがあると感じています。リッチなMはその分純粋な設計能力の差がでやすいですが。
2011-10-22 04:54:16@ugaya40 んーとすると、「コントロールの内部状態と入力仕掛は密結合することが多いので、VMに置くのが有用」って言い方ができます? それなら(個人的な感覚としては)分かりやすいです。
2011-10-22 04:55:38@yfakariya 先輩がさきほどおっしゃってたViewModel貧血症っておっしゃる通りで、だからこそ定期的にVMの自動生成なんて話が出るはずです。しかしそれがいいw
2011-10-22 04:56:07@yfakariya 入力しがかり状態に対する反応をVがVMを見て表示する機構がすでにあるので、それをいかそうとするとおっしゃるとおりに。
2011-10-22 04:57:17