【问题标题】:MVVM - ViewModel and DataService, where task should be located?MVVM - ViewModel 和 DataService,任务应该放在哪里?
【发布时间】:2015-09-22 12:53:25
【问题描述】:

我目前正在 WPF / MVVM 中遵循 dataservice 模式进行开发,其中 ViewModel 调用包含所有业务对象和方法的 Service .

现在,当我调用服务方法时,这需要一些时间,所以我应该创建一个新任务,以使 GUI 不会冻结。

在您看来,在 ViewModel 中还是在服务本身中启动任务的最佳位置是哪里?

...
// TaskFactory.StartNew(() => {}); // where I should put this ? *
...

class DataService
{
    MyBussObj mbo;

    CallBusinessOperation()
    {
        // * here ?
        while (mbo.Next())
        {
            // requires a while
        }
    }
}

class MyViewModel
{
    DataService service = new DataService();

    void DoIt()
    {
        // * here ?
        service.CallBusinessOperation();
    }
}   

【问题讨论】:

  • IMO 你应该使服务方法异步,并用 await 调用它们
  • 因为它比单纯使用任务更清晰透明
  • 如果你在Net 4.0你只能使用Task

标签: c# wpf mvvm viewmodel dataservice


【解决方案1】:

我会在视图模型中创建并启动任务。

理论上,您可以在视图模型中启动 3 个不同的任务,并且仅在所有任务或第一个任务完成后更新 UI。在这种情况下,视图模型负责控制流。

如果服务方法实现本身具有需要异步访问其他几个服务的控制逻辑,我将在那里启动相应的任务。

总而言之,我将启动控制逻辑所在的任务。

【讨论】:

  • 谢谢!我没有足够的声望来投票给你的答案,但一旦我愿意,它就会提高
【解决方案2】:

我会在 ViewModel 中执行此操作,因为您可以轻松地刷新 ProgressChanged 上的属性或您想要的任何其他内容。

【讨论】:

  • 是的,但我也可以在数据服务中这样做,因为它可以推送视图模型以获取任何通知。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-17
  • 2018-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多