使用事件驱动方法与非事件驱动(程序)方法的优缺点是什么?
没有EDP:
对象A响应某些用户输入。对象A调用对象B中的方法和对象C中的方法,它们执行各自的任务。
使用EDP:
对象A响应某些用户输入。对象A发布一个事件,其中订阅了对象B和C.相关数据被打包成EventArgs并由B& B收到。 C和他们执行各自的任务。
使用其中一个是否有优势?我在一个需要选择的十字路口。但是,我没有任何关于哪一个优越的客观信息,以及在哪些方面可能比另一方更具优势。
谢谢!
编辑:我理解其差异的方式与此处描述的方式类似:https://stackoverflow.com/a/28135353/3547347
答案 0 :(得分:2)
使用其中一个是否有优势?
是 - 使用事件解耦 A
,B
和C
。例如,如果没有事件,则不能通过让另一个类型响应A
事件而不修改A
代码来扩展功能。
缺点是代码更难(尽管不是非常糟糕)而且你必须编写更多代码和管道代码#34;添加所有相关事件。它也使跟踪逻辑变得更加困难,因为您不知道在任何时候可能正在监听A
个事件。
答案 1 :(得分:1)
可扩展性和维护。每次要添加新用户时,都不必回到该方法并添加到该方法中。在没有EDP示例的情况下,您只需将要呼叫的方法添加到其订阅者列表中。
OOP就是封装代码中发生变化的部分,因此更改它们的后果尽可能少。每次在项目中的其他地方需要新功能时,您都不想修改模糊相关的类。
所以我会说两个选项,总是使用事件驱动模型。
答案 2 :(得分:0)
我认为你在谈论观察者模式。
当您在实现对象A时没有对象B和对象C时,可以使用观察者模式;或者如果您以后知道,其他类需要知道该事件,但您不希望他们必须修改对象A的代码。
答案 3 :(得分:0)
事件驱动编程是一种用于处理IO绑定进程的并发模型(如示例中的用户输入)。所以,实际上,您描述的两个流程都是事件驱动的。
两个例子之间的区别在于,通过在"观察者"之间引入发布/订阅抽象。对象和响应者"正如D Stanley所提到的那样,你是一个对象,通过添加一个间接层来解耦这两个层。
这种方法的优点是更大的抽象(以更复杂的代价为代价)。所以你可以做一些事情,例如在"观察员和#34;之间排队。和#34;响应者"这可以让您控制和观察您的过程,并扩展您的系统。
所以,例如,你的观察者"可以是一个前端应用程序,它将作业排队到队列服务器上,并由响应者"这是在其他服务器上运行的其他应用程序。这将是构建多层应用程序的一种方法。