我试图了解何时适合使用事件。在我看来,事件可以被视为 SQL 触发器。那么,使用一个域对象触发的事件来修改另一个域对象是否正确,或者如果我们使用事件来修改其他对象的状态,是否意味着缺乏深思熟虑的设计?或者应该有一个中介类,这些对象可以通过它互相修改?我该如何决定?

我在这里是否应该考虑一些权衡,例如事件的使用将如何影响可测试性?

有帮助吗?

解决方案

活动旨在将一个区域与另一个区域脱钩.

这有时涉及到一些 异步行为, ,这可以是附加功能,但不是强制性的。例如,如果您想在 GUI 中向用户提供快速反馈,并且您的部分代码运行得太慢(除非需要在提供反馈之前完成),那么常规调用可以执行快速代码,并创建一个事件,然后提供 GUI 反馈,而无需等待事件被实际处理。该事件存储在队列中,一个或多个线程按照自己的节奏处理该队列。

对于同步事件,它对于模块间通信非常有用,其中两个 模块之间没有编译时依赖关系. 。两者都可以知道事件类和“事件路由器”:

  • 一个模块创建一个事件并调用路由器,
  • 路由器(根据之前的配置)知道其他模块应该接收它,并将其发送到接收模块。

两个模块都不知道另一个模块,因此存在解耦概念。如果两者必须单独维护,那就太好了:-)


对于某些主题,存在许多变体,例如:

  • 广播 对于许多接收者
  • 故障转移 (如果接收器暂时关闭,则重新启动;当接收器启动并再次注册时,事件将被传递)
  • 审计 :技术模块可以接收针对其他模块的事件并记录它们
  • ...

通过事件修改域对象似乎有点奇怪. 。上面提到的脱钩真的有道理吗?

但是,在更准确地了解您的想法之前,我不会给出明确的意见。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top