假设我们有一个用MVP设计的Java应用程序,它有一个显示一些独立模块的页面。除其他外,我们将在应用程序中考虑两个独立的MVP模块。该应用程序中有一个功能,需要上述模块进行通信。模块提供了专门用于功能的接口(API)A和B。还有管理器(M)来处理此功能的逻辑。管理器可以遍历(或使用一些上下文)页面,以获得对应该参与所考虑功能的模块的引用。
下面的Manager代码片段介绍了我正在考虑的方法:
-
通过EventBus 使用异步事件
eventBus.addHandler(Event.CHECK_A_IS_OK, new CheckAIsOkHandler(Event e){ eventBus.fireEvent(Event.DO_SOMETHING_ON_B, e.getValue(); }); eventBus.fireEvent(Event.CHECK_A_IS_OK);
-
使用直接参考
A a; B b; void findModules(){ a = context.findA(); b = context.findB(); } ... if (a.check()){ b.doSomething(B.getValue()); }
问题是:
使用EventBus进行对象之间的定期通信(检查条件、返回值等)可以吗?或者只对真实事件使用事件模式更好(我的意思是通知订阅者发生了什么)?遵循第二种方法是否有利于松耦合?也许其他模式更合适?
直觉上,第二个学徒对我来说更干净。
我认为这一切都归结为你试图在代码方面实现的目标:)而不是功能,因为这两种方式都有效:)。对我来说,第二种方法是清洁和精益,它说明了需要什么。它可能不是松散耦合的代码,而是干净而明显的,我认为这是第二种方法的附加值:)。