2015-11-30 29 views
0

我正在开发一个GWT项目,并且有点困惑。它是一个服务器/客户端项目。我正在使用Autobean处理JSON。 Autobean需要使用接口才能工作。我以前没有在界面上工作太多,需要一些帮助。这是如何的Autobean代码:GWT(模型)接口/类

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(); 

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

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

如果您使用作为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原生界面,但它带有它自己的一些微妙的细微差别。

+0

谢谢。这清除了认为。我想我会坚持我的Autobean和界面 – MDK