GWT(模型)接口/类

Posted

技术标签:

【中文标题】GWT(模型)接口/类【英文标题】:GWT (model) interface/class 【发布时间】:2015-11-30 21:36:25 【问题描述】:

我正在做一个 GWT 项目,有点困惑。它是一个服务器/客户端项目。我正在用 Autobean 处理 json。 Autobean 需要使用接口才能工作。我以前在接口方面工作不多,需要一些帮助。 Autobean 代码是这样的:

interface User 
      int id();
      void setId(int id);
      String getUsername();
      void setUsername(String username);
    

interface Result
    List<User> getUsers();
    void setUsers(List<User> users);



interface Beanery extends AutoBeanFactory
      AutoBean<User> makeBean();
      AutoBean<Result> makeBeans();
      

要将 json 转换为列表,我会这样做。

AutoBean<Result> autoBeanCloneAB = AutoBeanCodex.decode(beanFactory, Result.class, "\"users\": " + json + "" );
List<User> users = autoBeanCloneAB.as().getUsers();

我也有一个 User 类,我不确定这是否是不必要的,或者我应该如何处理它。

public class User 

private int id;
private String username;


public int getId() 
    return id;


public void setId(int id) 
    this.id = id;



public String getUsername() 
    return username;


public void setUsername(String username) 
    this.username = username;


在我之前的所有项目中,我只使用模型类而不是接口。我试图阅读并似乎理解接口的概念,但在这种情况下,当我拥有用户界面时,我看不到任何使用用户类的理由。 什么是正确的方法? 使用 User 类有什么目的吗,如果有,请解释一下。

像往常一样。感谢所有帮助

【问题讨论】:

【参考方案1】:

如果您使用的是作为 Autobean 基础的代理,则需要该接口。它的工作原理非常类似于java proxy 模式。该接口实际上是具体实现的代理,而无需编译具体实现。在 GWT 的先前版本中,使用了 rpc 机制,这会产生问题,因为服务器端类必须是 100% GWT 兼容的,并且可以序列化才能编译。 RequestFactory 的 AutoBean 和 GWT 实现通过在编译时简单地从您的界面创建一个“DTO”来解决这个问题。这允许您在具体实现上调用 getter/setter 方法,而不必让 gwt 编译具体实现。您可以简单地通过 json 从服务器端到客户端进行状态传输,并且将在客户端代理上调用 getter/setter 方法(生成的接口实现)。该接口看起来像开销,但它是必需的,以便抽象出服务器端类中的代码。

我建议您查看 gwt requestfactory,因为它为您隐藏/处理了很多 Autobean 样板。您可以使用 RequestFactory 创建一个 Bean 并仍然使用 ProxyUtils 类将其转换为 json (如果我没记错的话)。然后您只需创建一个接口并使用@ProxyFor(concreteImplementation.class) 对其进行注释。编译器将为您生成所有必要的代码,您不必为创建 AutoBeanFactory 接口等而烦恼。

希望这会有所帮助。

附言

另一种选择是使用 jsni 原生界面,但这带有一些它自己的细微差别。

【讨论】:

谢谢。这清楚地认为。我想我会坚持使用我的 Autobean 和界面

以上是关于GWT(模型)接口/类的主要内容,如果未能解决你的问题,请参考以下文章

GWT Autobean 设置创建接口的初始值

GWT interface的使用例子

在 GWT 中,为啥方法不应该返回接口?

gwt接口HostedModeOptions扩展了超过1个类[重复]

GWT-Designer 在添加远程服务时不会构建异步接口

从 GWT-2.0.3 到 GWT-2.7.0 的应用程序升级问题?