我已经查看了一些关于MVP模式的不同示例,我发现了它的各种实现。我不清楚哪一个应该包含另一个:视图还是演示者?
顾名思义:
public MyPresenter(){
display = new MyView(this);
}
或作为我理智的逻辑(以及关于MVP的wikipedia页面)
public MyView(){
presenter = new MyPresenter(this);
}
或者我应该使用完全不同的方法来创建这些对象吗?
答案 0 :(得分:5)
DOM是浏览器中成本最高的东西之一,因此构建小部件在GWT中成本很高。相反,主持人通常很便宜,所以他们可以随意进行破坏和重建。
这就是为什么我建议尝试在许多演示者中重复使用您的观点(让它们单独或缓存几分钟)作为经验法则。
这意味着您(短命的)演示者应该引用您的(长寿命)视图。
我非常相信依赖注入,所以我不会在另一个内部实例化。这极大地有助于管理组件的生命周期,每个组件都独立于另一个组件 因此,您将视图注入演示者:创建演示者,选择视图(创建视图或从缓存获取视图)并将其提供给演示者。然后你将销毁演示者并保持视图在下次需要时重复使用(与另一个演示者)。
答案 1 :(得分:2)
使用MVP模式的一个主要原因是在Presenter中隔离您的逻辑,以便对其进行单元测试。
如果你这样做:
public MyPresenter(){
display = new MyView(this);
}
如果没有扩展GWTTestCase,您将无法对演示者进行单元测试。 所以我更喜欢:
public MyPresenter(MyViewInterface view){
this.view = view;
}
MyView实现MyViewInterface的位置。可以使用真正的MyView实现插入接口,也可以使用不需要启动GWT上下文进行测试的测试实现。