Gwt 架构 : why use MVP, 编辑器、RequestFactory、Gin 等?

标签 gwt architecture

我已经在 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

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

谢谢

最佳答案

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

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

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

但最后,“if it ain't broke, don't fix it ”。

关于Gwt 架构 : why use MVP, 编辑器、RequestFactory、Gin 等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12599358/

相关文章:

asp.net - Web应用程序的NTier架构的替代方案

java - gwt 的 openid 消费者

java - 将 html+css+js 转换为 PDF

java.util.LinkedList.Node<E> 无法分配给 GWT Serialized?

java - Eclipse 远程开发,有哪些选项?

sql-server - 数据老化技术

GWT - 发出 GET 请求

c# - 分层架构中的异常处理

rest - 跨 REST 微服务的事务?

Python:用于启动独立项目的标准骨架种子