Gwt架构:为什么要使用MVP,编辑器,RequestFactory,Gin等?

Max*_*AMM 7 architecture gwt

我已经在GWT应用程序上工作了一年,我们从未觉得需要使用任何这些框架或工具.

所以我觉得我们可能错过了.

我们做"代码背后"的风格.

这是一个关于我们如何构建代码的简单示例:

MyPanel.ui.xml:

<label ui:field="label"/>
<g:TextBox ui:field="box"/>
<g:Button ui:field="button"/>
Run Code Online (Sandbox Code Playgroud)

MyPanel.java:

@UiField
LabelElement label;
@UiField
TextBox box;
@UiField
Button button;

MyBean myBean;

Messages messages = GWT.create(Messages.class);
MyServiceAsync myServiceAsync = GWT.create(MyService.class);

...


protected void i18n() {
  label.setInnerText(messages.label());
  button.setText(messages.button());
}

...

@UiHandler("box")
void box_onValueChange(ValueChangeEvent<String> event) {
  myBean.setText(event.getValue());
}

@UiHandler("button")
void button_onClick(ClickEvent event) {
  myServiceAsync.sendData(myBean, new AsyncCallback<MyResponse>() {
     @Override
     public void onSuccess(ReponseDispoBean result) {
       Window.alert(result.message());
     }

     @Override
     public void onFailure(Throwable caught) {
       Window.alert(caught.getMessage());
     }
  });
}
Run Code Online (Sandbox Code Playgroud)

为了在面板之间进行通信(页面的一部分,每个都在自己的类中),我们使用小部件或应用程序的eventbus来发送自定义事件.

要导航,我们使用places/tokenizers/activities和historymapper

对于单元和功能测试,我们使用gwt-test-utils

就是这样.所以我想知道:这些工具有什么用处?有什么令人信服的理由可以使用它们?

谢谢

Tho*_*yer 13

编辑GIN处理减少样板.
例如,比较同 编辑.
当我说GIN处理减少样板时,只有你已经使用依赖注入(DI).如果你不使用DI,那么你可能应该这样做.

与DI类似,MVP有助于制作可测试的代码,特别是关于测试表示逻辑(不一定是业务逻辑,而不是UI).例如,它并不真正的问题是如何你展示的东西,重要的是你在正确的时间显示正确的事情.一个例子是错误:如果它们在屏幕顶部是红色,或者在表单字段旁边,或者在表单字段上的工具提示然后变为红色,则无关紧要; 重要的是,您在适当的时间向视图发送正确的错误集.该如何可以替换或修改(并最好应该也将进行测试),但什么是一样的.
构建多因素应用程序时MVP也很棒:如果屏幕在移动设备,平板电脑和桌面设备之间足够相似,那么您可以使用具有3种不同视图的相同演示者(这就是DI闪耀的地方!).

至于RequestFactory(RF),它是一个与GWT-RPC不同的客户端 - 服务器协议,具有自己的一组功能和限制.如果你没有GWT-RPC的问题,你不应该切换(虽然我建议你看看RF是什么).对我而言,RF的主要特征是它是一种协议(基于JSON)而不是API:客户端和服务器上的类不必完全相同,只要它们与客户端和客户端足够兼容即可.服务器了解彼此(添加属性,更改int为a double等); 与GWT-RPC相比,这是一个巨大的差异,即使对于类中的非常微小和微妙的更改,您也会遇到错误.

但最后," 如果没有破产,就不要修理它 ".


Chr*_*haw 1

我建议查看的一件事是 RequestFactory 与 gwt rpc。它不需要对象可序列化,并且具有相当多的性能增强,例如通过网络仅发送差异。

我们还使用类似于杜松子酒的 ClientFactory 模式。我们使用它来根据所使用的设备类型(平板电脑、移动设备、台式机)注入客户端类。