GWT(模型)接口/类

时间:2015-11-30 21:36:25

标签: class gwt interface model autobean

我正在研究一个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转换为List,我会这样做。

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类。 什么是正确的方法? 是否有使用User类的目的,如果是,请解释。

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

1 个答案:

答案 0 :(得分: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接口等。

希望这有帮助。

P.S。

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