【问题标题】:GWT RequestFactory - how to initialize it properly?GWT RequestFactory - 如何正确初始化它?
【发布时间】:2023-04-15 07:08:02
【问题描述】:

我的 GWT 应用程序遵循 MVP 模式,将单例 Display+Presenter 绑定在 Activity 中(借助 GIN):

public class MyActivity implements Activity {
  @Inject MyDisplay display; //usually bound in Singleton scope
  @Inject MyPresenter presenter;

  ...
  @Override
  public void start(AcceptsOneWidget panel, EventBus eventBus) {
    diplay.bindPresenter(presenter);
    presenter.start(eventBus);
    panel.setWidget(display);
  }
  ...
}

通常我使用 GIN 将特定 RequestFactory 的新实例注入特定 Presenter。我的演示者有start() 方法,我可以在其中传递代表Activity (ResettableEventBus) 创建的EventBus 实例。

public MyPresenter {

  @Inject MyRequestFactory requestFactory;

  public void start(EventBus eventBus) {
    requestFactory.initialize(eventBus);
    ...
  }
  ...
}

我认为让 GIN 创建和注入 MyRequestFactory 的新实例总是安全的。但是如果我想使用RequestFactorySourceMyPresenter进行单元测试,我宁愿需要初始化RequestFactory使用:

requestFactory.initialize(eventBus, new InProcessRequestTransport(processor));

问题来了。我可以在Singleton 范围内绑定MyRequestFactory(生成的实例是否保持任何状态?),并用我的单例EventBus 全局初始化它(它是否取决于ActivityEventBus?) - 什么是后果?我假设注入到MyPresenterMyRequestFactory 实例已经为生产或测试初始化​​。另一种解决方案是在MyPresenter 中注入一些额外的RequestFactory 初始化策略,但有必要吗?

【问题讨论】:

    标签: java unit-testing gwt junit requestfactory


    【解决方案1】:

    RequestFactory设计用作单例

    假设您还有一个应用程序范围的事件总线,它的工作方式与您现在使用的一样:RequestFactory 只发布到事件总线,它不监听事件。

    【讨论】: