GWT:MVP Presenter界面

时间:2013-03-11 20:46:20

标签: gwt interface presenter

我试着理解gwt关于活动和场所的例子是如何运作的(https://developers.google.com/web-toolkit/doc/latest/DevGuideMvpActivitiesAndPlaces)。我想知道为什么他们为演示者定义一个界面。我知道视图界面有助于轻松交换视图。但是演示者界面的用途是什么?

4 个答案:

答案 0 :(得分:0)

使用接口而不是具体类来设计应用程序始终是最佳实践。

  1. 参考 - What does "program to interfaces, not implementations" mean?
  2. 参考 - WikiPedia example for MVP

答案 1 :(得分:0)

MVP architecture中设计相当干净的另一个关键因素是定义Presenter interface(我们已经知道OOP concept中界面JAVA的美丽)。

Presenter界面,允许我们View callback在收到活动时加入presenter。 Presenter接口定义以下内容:

public interface Presenter<T> {
 void onAddButtonClicked(); 
}

然后您可以将演示者设置为您的视图,如下所示

private Presenter<T> presenter;
  public void setPresenter(Presenter<T> presenter) {
    this.presenter = presenter;
  }

最后,当PresenterConcreteClass实现presenter接口时,implementations会触发。

答案 2 :(得分:0)

除了使用界面的清洁度之外,您也没有理由不测试您的视图。您可以使用端到端测试,但您也可以使用GWTTestCase来实例化视图并使用模拟演示者。

然后你可以测试“当我点击这个按钮时,它应该从演示者调用这个方法,其中值为X,Y和Z作为参数”,或者“当我调用这个视图的方法时使用这些参数,然后这样的小部件应该变成红色而另一个应该隐藏/折叠/显示/无论什么“。

我曾经使用过它,类似地构建了一个简单的 testbed 应用程序,用虚假数据手动测试UI。该应用程序包含用于模拟演示者使用虚假数据调用视图的按钮,并使用Window.alert或类似的东西处理来自视图的演示者调用。您可以在浏览器中启动该应用程序,然后单击此处并验证该视图是否按预期工作。

当您稍后在表单中添加字段时,这可能很有用,以确保您使用演示者正确连接它。当单元测试足够时,您不希望设置GWT-RPC / RequestFactory /来自真实演示者的任何服务。

答案 3 :(得分:0)

离我头顶的两大原因(可能还有其他人......)

  1. 测试:您的Presenter不必直接引用View,这很好,因为View包含不能在标准单元中使用的GWT对象(即:任何Widget)测试用例:任何GWT对象必须具有要实例化的JS容器(即:Browser或GWTTestCase); JUnit测试用例不能使用浏览器; GWTTestCase运行非常慢,因此您不希望不必使用它。如果没有界面,Presenter必须通过直接引用View来引用View的方法;这意味着在测试Presenter时,必须实例化View,它必须实例化其Widgets(此时需要GWTTestCase用于Widgets)。你应该做的第一个目的是测试逻辑,这应该完全在Presenter中以避免GWTTestCase ...使用Display界面,你可以这样做:专注于测试Presenter,而不是实例化View的复杂性(具有自己的瞬时复杂程度)并且必须使用GWTTestCase进行混乱
  2. 为同一个演示者提供多个视图:[我认为如果你有不同的平台(即:移动应用程序与浏览器),你们只会这样做,每个平台都需要自己的视图(因为移动应用程序版本的View与浏览器视图的呈现方式不同,因为它们是具有不同GUI实体的不同平台)]。然后,多个视图将以各自的方式实现Display接口。然后单个Presenter可以包含所有视图相同的逻辑,用于所有不同的视图,并且所有View实现都保证遵循该单个Presenter的相同期望(这是Display界面中的编码)!这是使用@SSR Answers设计接口的OOP最佳实践的体现。