none
MVVM エラー表示について RRS feed

  • 質問

  • MVVMについてまだ調べ始めて間もないので、ご教授頂ければ幸いです。

    画面のボタンを押し、ViewModelからModelのメソッドを呼び出し、その処理でエラーが起こった際にユーザにエラー内容がわかるように

    メッセージを表示したいと思っています。

    最初はそのメソッドの戻り値で判断して、メッセージなどを出せばよいのかと考えていたのですが、いろいろ調べていくとModelのメソッドは戻り値などは

    持たないようにするということが書いてあった気がします。。。

    その際は、どのような流れでエラー表示まで行うのでしょうか。

    よろしくお願い致します。

    2015年5月19日 1:02

回答

  • こんにちは。

    いろいろ調べていくとModelのメソッドは戻り値などは持たないようにするということが

    MVVMの考え方(責務の分離?)からいくとそれがおそらく理想なんだと思います。
    ViewModelはModelの状態表示のみを行うべきで、戻り値を受けて何かしらの処理をするということはビジネスロジックをViewModelに含むことになります。

    流れの一例としては

    1. ViewModelはModelの処理を呼び出す。
    2. Modelはエラーが発生した場合は自身のエラー状態を更新し、ViewModelにイベントで状態変更などの通知を行う。
    3. ViewModelを介してViewへModelの状態表示を行う。その状態がどういう時にどういう形式で表示するのかはViewで定義できますね。

    となるのかなと思います。Modelから何かしらのイベント発行しViewModelが受け取る形でしょうか。

    MVVMはアーキテクチャのひとつで、実装方法を強制するものではありません。
    あまり振り回されないことも重要です。

    MVVMとは○○だから××であるべき。だから△△という実装にしなければいけない、という考えに陥りがちですが(私も)
    いいとこどりしてうまく付き合っていくのが大事ではないでしょうかね。

    なので戻り値を持たないのは理想形かもしれないが、戻り値を持たないようさせるしなければいけないわけではないです。
    工数とのトレードオフなどを鑑みて、チーム内で検討するのが良いでしょう。

    MVVMについて私も理解出来ているわけではなく間違っている点あるかもしれませんが私の考えはこんなところです…。

    • 回答としてマーク tenteko_my 2015年5月19日 1:57
    2015年5月19日 1:14
    モデレータ

すべての返信

  • こんにちは。

    いろいろ調べていくとModelのメソッドは戻り値などは持たないようにするということが

    MVVMの考え方(責務の分離?)からいくとそれがおそらく理想なんだと思います。
    ViewModelはModelの状態表示のみを行うべきで、戻り値を受けて何かしらの処理をするということはビジネスロジックをViewModelに含むことになります。

    流れの一例としては

    1. ViewModelはModelの処理を呼び出す。
    2. Modelはエラーが発生した場合は自身のエラー状態を更新し、ViewModelにイベントで状態変更などの通知を行う。
    3. ViewModelを介してViewへModelの状態表示を行う。その状態がどういう時にどういう形式で表示するのかはViewで定義できますね。

    となるのかなと思います。Modelから何かしらのイベント発行しViewModelが受け取る形でしょうか。

    MVVMはアーキテクチャのひとつで、実装方法を強制するものではありません。
    あまり振り回されないことも重要です。

    MVVMとは○○だから××であるべき。だから△△という実装にしなければいけない、という考えに陥りがちですが(私も)
    いいとこどりしてうまく付き合っていくのが大事ではないでしょうかね。

    なので戻り値を持たないのは理想形かもしれないが、戻り値を持たないようさせるしなければいけないわけではないです。
    工数とのトレードオフなどを鑑みて、チーム内で検討するのが良いでしょう。

    MVVMについて私も理解出来ているわけではなく間違っている点あるかもしれませんが私の考えはこんなところです…。

    • 回答としてマーク tenteko_my 2015年5月19日 1:57
    2015年5月19日 1:14
    モデレータ
  • 回答頂き、ありがおうございました。参考になりました。

    いわれているようにどこかとらわれている部分があったと思いますが、

    改めてうまく付き合っていくことが大切であると教えていただいたので、工数などから検討して実装をしていきたいと思います。

    本当にありがとうございました。

    2015年5月19日 1:55
  • 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/

    2015年5月19日 2:14
    モデレータ