设计模式-事件或直接参考



假设我们有一个用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进行对象之间的定期通信(检查条件、返回值等)可以吗?或者只对真实事件使用事件模式更好(我的意思是通知订阅者发生了什么)?遵循第二种方法是否有利于松耦合?也许其他模式更合适?

直觉上,第二个学徒对我来说更干净。

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

最新更新