首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GWTP和抽象presenter类

GWTP和抽象presenter类
EN

Stack Overflow用户
提问于 2015-09-05 01:30:21
回答 3查看 674关注 0票数 0

在我的设计中,我希望有一个视图/展示者对,其中展示者是一个经过扩展的抽象类。例如,我的设计由一系列问题组成,这些问题一次只问一个。对于是/否的问题,我可能有一个视图/演示者对。我希望有一个具有getQuestion、onYes、onNo等抽象方法的YesOrNo演示器。这个提示者的展示会引发问题,并且重载的uibinderHandlers将调用onYes和onNo。然后,我可能会用HasDogYesOrNo presenter扩展YesOrNo presenter,它将包含关于如果用户有狗该怎么做的业务逻辑。我可能对HasCatYesOrNo也有类似的东西。

所以我创建了两个类,它们扩展了泛型

代码语言:javascript
复制
YesNoPresenter<T extends Proxy<?>> extends Presenter<YesNo.MyView, T>

然后我定义了如下的类

代码语言:javascript
复制
public class HasCatsYesNoPresenter extends YesNoPresenter<HasCatsYesNoPresenter.MyProxy>

当我去绑定它们的时候,我有

代码语言:javascript
复制
bindPresenter(YesNoPresenter.class, YesNoPresenter.MyView.class, YesNoView.class,
            HasCatsYesNoPresenter.MyProxy.class);
bindPresenter(YesNoPresenter.class, YesNoPresenter.MyView.class, YesNoView.class,
            HasDogsYesNoPresenter.MyProxy.class);

但我得到了一个错误

代码语言:javascript
复制
$MyView is Double-bound: Bound at com.gwtplatform.mvp.client.gin.AbstractPresenterModule ...

似乎我不能将两个演示者绑定到同一个视图?我真的很想重用视图,但是把不同的业务逻辑放在后面。在GWTP中有没有更好的方法来做到这一点?我必须要做的是对不同的业务逻辑展示器重用相同的视图,并让这些业务逻辑展示器中的每一个都是可加书签的。我想要的是让我的业务逻辑演示者也成为匿名类,但这可能要求太高了。

对于我的简单YesNo案例,还有其他方法来实现我的presenter,但是我有一些更复杂的presenter,我认为重用代码的最好方法是使用基本presenter所需的逻辑扩展该presenter。yesnopresenter只是一个例子。

EN

回答 3

Stack Overflow用户

发布于 2015-09-11 21:33:39

在多个Presenter中重用视图的最好方法是创建一个PresenterWidget及其关联的视图,并将其注入到您需要的Presenter中。

我必须具备的是对不同的业务逻辑展示器重用相同的视图,并使这些业务逻辑展示器中的每一个都可加书签

这正是PresenterWidget的作用所在。下面是一个可以在整个应用程序中重用的PresenterWidget的具体example

票数 0
EN

Stack Overflow用户

发布于 2015-09-11 21:40:34

我相信[正如雷诺所说,你正在寻求使用PresenterWidget。然而,我也认为你想要做的事情只与演示者一起是可能的。

您可以为每个子演示者声明一个视图接口(如果您有一些逻辑需要在它们之间共享,这些子视图接口可以扩展父视图接口)

所以你会有

(请注意,"->“的意思是”取决于“)

代码语言:javascript
复制
ParentPresenter -> ParentView
ParentViewImpl implements ParentView
ChildPresenter1 -> ChildView1 extends ParentView
ChildPresenter2 -> ChildView2 extends ParentView

bind(ChildView1).to(ParentViewImpl)
bind(ChildView2).to(ParentViewImpl)

// and then you would have to bind your proxies manually
bind(MyProxy1.class).asEagerSingleton();
bind(MyProxy2.class).asEagerSingleton();

通过这样做,您可以

这有意义吗?

票数 0
EN

Stack Overflow用户

发布于 2016-01-09 04:30:05

bindPresenter快捷方式方法不是用来处理您的用例的。我相信你想做的是:

代码语言:javascript
复制
bind(HasCatsYesNoPresenter.class).in(Singleton.class);
bind(HasCatsYesNoPresenter.MyProxy.class).asEagerSingleton();
bind(HasDogsYesNoPresenter.class).in(Singleton.class);
bind(HasDogsYesNoPresenter.MyProxy.class).asEagerSingleton();
bind(YesNoPresenter.MyView.class).to(YesNoView.class);

视图绑定不绑定在单例中,以确保视图的新实例将被注入到每个呈现器中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32403623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档