我正在尝试理解什么时候使用事件是合适的。在我看来,事件可以被认为是SQL触发器。那么,使用一个域对象触发的事件来修改另一个域对象是否正确,或者如果我们使用事件来修改其他对象的状态,这是否意味着缺乏深思熟虑的设计?或者应该有一个中介器类,这些对象应该通过它来修改彼此?我该如何决定?
这里有没有我应该关注的权衡,比如事件的使用将如何影响可测试性?
发布于 2010-01-27 09:04:41
事件旨在将一个区域与另一个解耦。
这有时涉及到一些异步行为,这可以是一个附加功能,但不是必需的。例如,如果您希望在GUI中为用户提供快速反馈,而部分代码运行得太慢(除非需要在提供反馈之前完成),则常规调用可以执行快速代码,并为其他代码创建事件,然后在不等待事件实际处理的情况下提供GUI反馈。此事件存储在队列中,一个或多个线程正在以自己的速度处理该队列。
对于同步事件,它对于模块间通信非常有用,在这种情况下,两个模块对彼此的没有编译时依赖关系。两者都可以知道事件类和“事件路由器”:
两个模块都不知道对方,因此解耦的概念。如果两者必须分开维护,则非常好用:-)
对于某些主题,存在许多变体,例如:
通过事件修改域对象的看起来有点奇怪,。上面提到的脱钩真的是合理的吗?
然而,在更准确地理解你的想法之前,我不会给出明确的意见。
https://stackoverflow.com/questions/2145545
复制