7

我已经在 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());
     }
  });
}

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

为了导航,我们使用地点/标记器/活动和历史映射器

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

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

谢谢

4

4 回答 4

13

编辑GIN处理减少样板文件。
例如,比较没有编辑器和编辑器的同一屏幕。 当我说 GIN 处理减少样板时,只有当您已经使用依赖注入(DI) 时。如果您不使用 DI,那么您可能应该使用.

与 DI 类似,MVP有助于制作可测试的代码,尤其是关于测试表示逻辑(不一定是业务逻辑,也不是 UI)。例如,你如何展示东西并不重要,重要的是你在正确的时间展示了正确的东西。一个例子是错误:它们是在屏幕顶部显示为红色,还是在表单字段旁边,或者在表单字段上的工具提示中然后变成红色,这并不重要;重要的是您在正确的时间向视图发送正确的错误集。如何可以替换或修改(理想情况下也应该进行测试),但什么相同的。
MVP 在构建多因素应用程序时也非常有用:如果移动设备、平板电脑和台式机之间的屏幕足够相似,那么您可以使用具有 3 个不同视图的同一个演示者(这就是 DI 的亮点!)。

至于RequestFactory (RF),嗯,它是一种不同于 GWT-RPC 的客户端-服务器协议,具有自己的一组特性和限制。如果您对 GWT-RPC 没有问题,则不应切换(尽管我建议您查看 RF 是什么)。对我来说,RF 的主要特点是它是一个协议(基于 JSON)而不是一个 API:客户端和服务器上的类不必完全相同,只要它们足够兼容,客户端和服务器服务器相互理解(添加属性,将 an 更改int为 adouble等);与 GWT-RPC 相比,这是一个巨大的差异,在 GWT-RPC 中,即使您的类中发生非常微小和细微的变化,您也会遇到错误。

但最后,“<a href="http://en.wiktionary.org/wiki/if_it_ain%27t_broke,_don%27t_fix_it" rel="noreferrer">如果它没有坏,就不要修复它” .

于 2012-09-26T13:27:25.823 回答
2

MVP 只是将逻辑与视图代码分开,并帮助在 jvm 中运行测试,而不是使用慢速 GWTTestcase。

编辑器有助于将对象属性绑定到输入字段。这使得从和输入字段复制到对象的代码已过时。

杜松子酒有助于连接你的物品。同样,这使测试变得更加容易。您可以自行连接您的对象,但如果 gin 自动为您执行此操作,您为什么要这样做?

RequestFactory 是 RPC 方法的替代品,并且更加以数据为中心。它可以帮助您在批处理操作中获取数据,并且它使 DTO 的使用过时了。您当然可以坚持使用 RPC 方法。但也有一些缺点。您必须为每个服务创建一个 Serverlet,或者您可以使用命令模式。这导致了问题,您必须为非常请求创建一个操作、响应和处理服务。这是需要维护的大量代码。

于 2012-09-26T12:37:42.073 回答
1

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

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

于 2012-09-26T12:37:07.723 回答
0

你的方法没问题。事实上,我已经开始了许多这样的原型项目(而不是 gwt-test-utils,对于此类项目,我只使用 GWTTestCase)。你知道,有时这就是我们所需要的,而其他一切只会增加复杂性!所以它不仅适用于原型,而且对于一些实际项目来说确实可以很好地工作。

但结果往往是,我想重用一些组件,并使它们更具可配置性。这就是我重构为 MVP 的时候了。如果我还没有 Gin(实际上,现在我通常用 Gin 开始所有项目)。

因此,当发现对它们的需求或某种优势(不是因为它们在理论上很棒或“时髦”)时,您可以添加这些东西。

顺便说一句,我不使用事件总线方法(除了小的、定义明确的事件集),因为事件系统的复杂性通常会爆炸。

于 2012-09-26T12:54:10.897 回答