0

我正在用 MVVMLight 编写一个 MVVM Silverlight 应用程序。我在问自己在 Model 和 ViewModel 之间进行通信的最佳方式是什么。我的模型有来自 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 都可以挂钩此操作。

在第二个示例中,我使用经典方法发送在 Completed 事件上触发的回调。只触发了一个回调,但代码更具可读性。

最好的方法是什么?

4

1 回答 1

1

我会说:取决于!严重地!这取决于

  • 你想完成什么(良好的设计、可扩展性等)
  • 你习惯做什么
  • 您想要的目标环境想要什么
  • 有多少人在做这个项目
  • 估计。1.000 件以上

我喜欢第一种方法,因为它给了我类似服务总线的行为,如果我愿意,我可以使用配置。第二个在类型安全方面更具体,因为您可能会在发布消息时出错。

于 2012-06-28T10:47:13.217 回答