长时间运行的任务通常在后台线程中执行,以防止UI冻结。似乎线程逻辑可以驻留在视图中或控制器中。
作为一个例子(在C#中),假设有一个名为RunAsync
的方法在后台线程中运行委托,这里有两种方法:
// Option 1
public class View {
public void OnButtonClicked() {
RunAsync(() => controller.DoSomething());
}
}
public class Controller {
public void DoSomething() {
model.Foo();
}
}
或:
// Option 2
public class View {
public void OnButtonClicked() {
controller.DoSomething();
}
}
public class Controller {
public void DoSomething() {
RunAsync(() => model.Foo());
}
}
以某种方式做到这一点是否有优势?
答案 0 :(得分:5)
我看到控制器负责线程安全的两个参数。
答案 1 :(得分:1)
我的理解是Controller(或WPF中的ViewModel)应该处理这个问题。 View始终与“VIEW”相关的东西相结合,因此运行后台作业等任务应该转到控制器。
对你来说VIEW应该处理这个逻辑并不奇怪吗?
答案 2 :(得分:1)
在我看来,它应由财务主任处理。由于您希望尽可能地将Model与View分开,因此View应该不知道model.Foo()
之类的特定调用需要很长时间,因此需要异步运行。另一方面,Controller是唯一真正了解这两者的人,因此应该决定某些操作是否需要异步运行。