multithreading - 谁应该在 MVC 中处理线程?

标签 multithreading model-view-controller

长时间运行的任务通常在后台线程中执行,以防止 UI 卡住。似乎线程逻辑可以驻留在 View 或 Controller 中。

举个例子(在 C# 中),假设有一个名为 RunAsync 的方法。在后台线程中运行委托(delegate),这里有两种方法:

// 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());
  }
}

以一种方式或另一种方式这样做有优势吗?

最佳答案

我看到 Controller 负责线程安全的两个论点。

  • Controller (至少在概念上)可被许多 View 重用。我们避免重复自己,而是将 RunAsync() 放在 Controller 中而不是许多 View 中。
  • 只有 Controller 真正“知道”是否需要任何这样的线程。事实上,我们将来可能会更改 Controller 。所以我们有一个“单一责任”的思维方式。 Controller 既决定是否需要 RunAsynch() 并且实际上确保它完成。
  • 关于multithreading - 谁应该在 MVC 中处理线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11407865/

    相关文章:

    c# - 为什么脚手架没有按预期工作?

    java - 如何(或者你应该)避免 jsf 中的长方法/类

    c++ - boost 线程列表

    c# - 链式锁?

    java - 控制多线程连接的条件

    multithreading - 事件驱动和基于线程的服务器系统有什么区别?

    c - 输出值与两个 pthread 交错

    java - 如何配置mvc spring bean Controller 的属性?

    css - MDB Bootstrap 无法正常运行

    ruby-on-rails - 在 RoR View 中显示 JSON 变量