假设我们有一个使用 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 进行对象之间的常规通信(检查条件、返回值等)吗?或者最好只将事件模式用于真实事件(我的意思是通知订阅者发生了某些事情)?遵循第二种方法是否反对松耦合?也许其他一些模式会更合适?
直觉上,第二种方法对我来说更干净。