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

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

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

我们做“代码背后”的风格.

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

MyPanel.ui.xml:

<label ui:field="label"/>
<g:TextBox ui:field="box"/>
<g:Button ui:field="button"/>

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());
     }
  });
}

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

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

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

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

谢谢

编辑和GIN处理减少样板.
例如,比较相同的屏幕 withoutwith编辑器.
当我说GIN处理减少样板时,只有你已经使用依赖注入(DI).如果你不使用DI,那么, you probably should.

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

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

但最终,“if it ain’t broke, don’t fix it”.

相关文章
相关标签/搜索