【发布时间】:2015-09-04 17:30:20
【问题描述】:
在我的设计中,我想要一个视图/演示者对,其中演示者是一个可以扩展的抽象类。例如,我的设计包含一堆问题,每次都会被问到一个问题。对于是/否问题,我可能有一对视图/演示者。我希望有一个 YesOrNo 演示者,它具有 getQuestion、onYes、onNo 等抽象方法。这个演示者的揭示会提出问题,重载的 uibinderHandlers 会调用 onYes 和 onNo。然后,我可能会使用 HasDogYesOrNo 演示器扩展 YesOrNo 演示器,该演示器将包含有关如果用户有狗该怎么办的业务逻辑。 HasCatYesOrNo 我可能有类似的东西。
所以我创建了两个扩展泛型的类
YesNoPresenter<T extends Proxy<?>> extends Presenter<YesNo.MyView, T>
然后我定义类
public class HasCatsYesNoPresenter extends YesNoPresenter<HasCatsYesNoPresenter.MyProxy>
当我去绑定它们时,我有
bindPresenter(YesNoPresenter.class, YesNoPresenter.MyView.class, YesNoView.class,
HasCatsYesNoPresenter.MyProxy.class);
bindPresenter(YesNoPresenter.class, YesNoPresenter.MyView.class, YesNoView.class,
HasDogsYesNoPresenter.MyProxy.class);
但我得到一个错误
$MyView is Double-bound: Bound at com.gwtplatform.mvp.client.gin.AbstractPresenterModule ...
似乎我无法将两个演示者绑定到同一个视图?我真的很想重用视图,但在它们后面放置不同的业务逻辑。在 GWTP 中有没有更好的方法来做到这一点?我的必备条件是使用不同的业务逻辑演示者重用相同的视图,并让每个业务逻辑演示者都可以添加书签。一个希望是让我的业务逻辑演示者也成为匿名类,但这可能要求太多。
对于我的简单 YesNo 案例,还有其他方法可以实现我的演示者,但我有一些更复杂的演示者,我认为重用代码的最佳方法是使用演示者所需的逻辑扩展基本演示者。 yesnopresenter 只是一个例子。
【问题讨论】:
-
我看到我只需要将演示者绑定到代理,然后 bindSharedView 将基本演示者绑定到视图。但是现在我很困惑基础演示者(抽象)类应该扩展什么?我问是因为代理应该在presenterImpl类中,但视图在基类中?
标签: java gwt gwtp gwt-platform