我正在尝试了解何时适合使用事件。在我看来,一个事件可以被认为是一个SQL触发器。 那么,使用由一个域对象触发的事件来修改另一个域事件是否正确,或者如果我们使用事件修改其他对象的状态,它是否意味着缺乏深思熟虑的设计? 或者是否应该有一个中介类,这些对象应该通过它们相互修改?我该如何决定?
在这里我是否应该关注任何权衡,例如事件的使用将如何影响可测试性?
答案 0 :(得分:2)
事件旨在将一个区域与另一个区域分离。
这有时涉及一些异步行为,这可能是一项附加功能,但不是强制性的。例如,如果要在GUI中向用户提供快速反馈,并且代码的一部分运行速度太慢(除非需要在提供反馈之前完成),那么常规调用可以执行快速代码,并创建其他人的事件,然后提供GUI反馈,而无需等待事件实际处理。此事件存储在队列中,并且一个或多个线程按照自己的节奏处理该队列。
对于同步事件,它对于模块间通信非常有用,其中两个模块彼此之间没有编译时依赖性。两者都可以了解事件类和“事件路由器”:
两个模块都不知道另一个,因此解耦概念。如果两者都必须单独维护,那就非常好: - )
对于某些主题,存在许多变体:
通过事件修改域对象似乎有点奇怪。提到的脱钩是否真的合理?
但是,在更准确地理解你的想法之前,我不会给出明确的意见。