0

我正在做一个 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 类是否有任何目的,如果是,请解释。

照常。感谢所有帮助

4

1 回答 1

1

如果您使用的是作为 Autobean 基础的代理,则需要该接口。它的工作原理非常类似于java 代理图案。该接口实际上是具体实现的代理,而无需编译具体实现。在 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 本机接口,但这带有一些它自己的细微差别。

于 2015-11-30T23:06:08.063 回答