0

假设我们有一个使用 MVP 设计的 Java 应用程序,其页面显示一些独立的模块。除其他外,我们将考虑应用程序中的两个独立 MVP 模块。应用程序中有一项功能需要上述模块进行通信。这些模块提供专门用于该功能的接口 (API) A 和 B。还有管理器 (M) 来处理此功能的逻辑。管理器可以遍历(或使用某些上下文)页面来获取对应该参与所考虑功能的模块的引用。

下面的 Manager 代码片段展示了我正在考虑的方法:

  1. 通过 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);
    
  2. 使用直接引用

    A a;
    B b;
    
    void findModules(){
        a = context.findA();
        b = context.findB();
    }
    
    ...
    
    if (a.check()){
        b.doSomething(B.getValue());
    }
    

问题是:

可以使用 EventBus 进行对象之间的常规通信(检查条件、返回值等)吗?或者最好只将事件模式用于真实事件(我的意思是通知订阅者发生了某些事情)?遵循第二种方法是否反对松耦合?也许其他一些模式会更合适?

直觉上,第二种方法对我来说更干净。

4

1 回答 1

1

我认为这一切都归结为您试图在代码方面实现的目标:) 而不是功能,因为两种方式都有效:)。对我来说,第二个方法是干净和精益,它说明了需要什么。它可能不是松散耦合的代码,而是干净而明显的,我认为这是第二种方法的附加值:)。

于 2012-11-23T19:01:52.200 回答