トップ回答者
MVVM エラー表示について

質問
-
回答
-
こんにちは。
いろいろ調べていくとModelのメソッドは戻り値などは持たないようにするということが
MVVMの考え方(責務の分離?)からいくとそれがおそらく理想なんだと思います。
ViewModelはModelの状態表示のみを行うべきで、戻り値を受けて何かしらの処理をするということはビジネスロジックをViewModelに含むことになります。流れの一例としては
- ViewModelはModelの処理を呼び出す。
- Modelはエラーが発生した場合は自身のエラー状態を更新し、ViewModelにイベントで状態変更などの通知を行う。
- ViewModelを介してViewへModelの状態表示を行う。その状態がどういう時にどういう形式で表示するのかはViewで定義できますね。
となるのかなと思います。Modelから何かしらのイベント発行しViewModelが受け取る形でしょうか。
MVVMはアーキテクチャのひとつで、実装方法を強制するものではありません。
あまり振り回されないことも重要です。MVVMとは○○だから××であるべき。だから△△という実装にしなければいけない、という考えに陥りがちですが(私も)
いいとこどりしてうまく付き合っていくのが大事ではないでしょうかね。なので戻り値を持たないのは理想形かもしれないが、戻り値を持たないようさせるしなければいけないわけではないです。
工数とのトレードオフなどを鑑みて、チーム内で検討するのが良いでしょう。MVVMについて私も理解出来ているわけではなく間違っている点あるかもしれませんが私の考えはこんなところです…。
- 回答としてマーク tenteko_my 2015年5月19日 1:57
すべての返信
-
こんにちは。
いろいろ調べていくとModelのメソッドは戻り値などは持たないようにするということが
MVVMの考え方(責務の分離?)からいくとそれがおそらく理想なんだと思います。
ViewModelはModelの状態表示のみを行うべきで、戻り値を受けて何かしらの処理をするということはビジネスロジックをViewModelに含むことになります。流れの一例としては
- ViewModelはModelの処理を呼び出す。
- Modelはエラーが発生した場合は自身のエラー状態を更新し、ViewModelにイベントで状態変更などの通知を行う。
- ViewModelを介してViewへModelの状態表示を行う。その状態がどういう時にどういう形式で表示するのかはViewで定義できますね。
となるのかなと思います。Modelから何かしらのイベント発行しViewModelが受け取る形でしょうか。
MVVMはアーキテクチャのひとつで、実装方法を強制するものではありません。
あまり振り回されないことも重要です。MVVMとは○○だから××であるべき。だから△△という実装にしなければいけない、という考えに陥りがちですが(私も)
いいとこどりしてうまく付き合っていくのが大事ではないでしょうかね。なので戻り値を持たないのは理想形かもしれないが、戻り値を持たないようさせるしなければいけないわけではないです。
工数とのトレードオフなどを鑑みて、チーム内で検討するのが良いでしょう。MVVMについて私も理解出来ているわけではなく間違っている点あるかもしれませんが私の考えはこんなところです…。
- 回答としてマーク tenteko_my 2015年5月19日 1:57
-
MVVMと言っても、View、Model、ViewModelの3つのクラスから成っている必要はありません。このフォーラムでは何度も述べていることですが、私はView、ViewModel、UIOBject、Modelの4つの構成にすることが多いです。
以下、WPFではなくてWindowsフォームの例ですが、UIObject、Modelの関係はWPFでも全く同様です。WPFでは、UIObjectがViewとバインドします。
また、エラー通知にはIDataErrorinfoを使用していますが、これもWPFでも全く同様に使えます。WindowsフォームにおけるIDataErrorInfoの実装サンプル
https://code.msdn.microsoft.com/WindowsIDataErrorInfo-637ebea1上記のページにあるように、Modelにはメソッドはありません。UIObjectがエラーチェックのメソッドを持ちます。エラーの結果はIDataErrorInfoを通して通知されます。
エラーチェックの方法は、IDataErrorInfoを使う方法以外にもDataAnnotationsを使う方法などありますが、私はIDataErrorInfoが自由度もあって好みです。
★良い回答には回答済みマークを付けよう! MVP - .NET http://d.hatena.ne.jp/trapemiya/
- 編集済み trapemiyaModerator 2015年5月19日 2:18 誤字訂正