0

MVVMLight を使用して MVVM Silverlight アプリケーションをコーディングしています。モデルとビューモデルの間で通信する最良の方法は何かを自問していました。私のモデルには Web サービスからの非同期呼び出しがあり、戻り値を取得する最善の方法がわかりません。

私はこれを試しました:

public static void ModifySomething(Something s)
{
    var c = MyServiceFactory.GetService();
    c.ModifySomethingCompleted += (sender, e) =>
    {
        if (e.Error != null)
        {
            Messenger.Default.Send(new XyzException(e.Error, "ModifyError"));
            return;
        }
        Messenger.Default.Send(e.Result, "ModifyOk");
    };
    c.ModifySomethingAsync(s);
}

この:

public static void ModifySomething(Something s, Action<Something, Exception> callback)
{
    var c = ServiceFactory.RecupererService();
    c.ModifySomethingCompleted += (sender, e) =>
    {
        if (callback != null) callback(e.Result, e.Error);
    };
    c.ModifySomethingAsync(s);
}

どちらも機能します。最初の例では MvvmLight Messenger を使用しているため、モデルのすべてのメソッドに対して文字列メッセージのリストを登録する必要があり、その後、任意の ViewModel がこのアクションにフックできます。

2 番目の例では、従来のアプローチを使用して、Completed イベントで発生するコールバックを送信します。起動されるコールバックは 1 つだけですが、コードははるかに読みやすくなっています。

最善のアプローチは何ですか?

4

1 に答える 1

1

私は言うだろう:依存する!真剣に!による

  • 達成したいこと(優れた設計、拡張性など)
  • あなたがしていることに慣れていること
  • 希望するターゲット環境が望むもの
  • プロジェクトに取り組んでいる人の数
  • estd。1.000アイテム以上

最初のアプローチは、サービスバスのような動作を提供し、必要に応じて構成を使用できるため、気に入っています。2つ目は、メッセージの投稿でエラーが発生する可能性があるため、タイプセーフティの観点からより具体的です。

于 2012-06-28T10:47:13.217 に答える