【发布时间】:2015-10-23 10:33:06
【问题描述】:
使用事件驱动方法与非事件驱动(过程)方法的优缺点是什么?
没有 EDP:
对象 A 响应一些用户输入。对象 A 调用对象 B 中的方法和对象 C 中的方法,它们执行各自的任务。
使用 EDP:
对象 A 响应一些用户输入。对象 A 发布订阅了对象 B 和 C 的事件。相关数据被打包到一个 EventArgs 中并由 B&C 接收并执行各自的任务。
使用其中一种是否有优势?我正处于需要选择的十字路口。但是,我没有任何客观信息来说明哪一个更胜一筹,以及在哪些方面一个比另一个更有优势。
谢谢!
编辑:我以与此处描述的方式类似的方式理解差异:https://stackoverflow.com/a/28135353/3547347
【问题讨论】:
-
视情况而定。例如,当对象 D 被添加到系统中时,您需要做什么?这可能多久发生一次?您的设计应该由您的需求驱动。而且“游戏编程”有点过于宽泛,无法进一步评论。
-
您的“事件驱动模型”和“非事件驱动模型”都是事件驱动模型。您只是使用了不同的术语来描述相同的行为。
-
将相关信息打包到
EventArgs等对象中并不是事件驱动方法所固有的。它只是一种设计模式,可以轻松实现前向兼容性(添加参数),而不会破坏公共 API。 -
首先,GUI 处理事件(您不仅有“ObjectA”对用户输入做出反应;GUI 中的所有控件都对用户输入做出反应,而您不知道哪个是一个将由用户选择)。
-
我大概只是对它有一个初步的了解。如果您有对象 A,然后根据某些输入调用对象 B、C、D....等中的方法。与对象 一个发布事件“ThingHappened”,而不是“知道”或“关心”哪些其他对象订阅了该事件。怎么一样?
标签: oop events architecture event-handling