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(模型)接口/类的主要内容,如果未能解决你的问题,请参考以下文章