在GWT和AppEngine之间共享类

时间:2012-11-01 12:56:04

标签: google-app-engine gwt

我使用AppEngine(Java)和GWT来设计我的应用程序。我有一个类,表示客户端(GWT)和服务器(AppEngine)都在作用的对象。现在我有一个AppEngine类(包含所有服务器端信息)和客户端使用的共享目录中的一个类(并在RPC调用之间传递)。现在我需要在两者之间进行转换的方法,并重现服务器和客户端所需的方法。这已经成为一个令人头痛的问题,当课程变得更复杂时,我发现错误很容易发生。

我之所以不创建一个共享类的原因是我不想将我的一些服务器所述逻辑,方法和属性暴露给客户端。但我正在阅读,当GWT编译时,它会丢弃未使用的方法,并从编译的代码中删除属性。这是真的,这会保护我不想在客户端看到的代码吗?我应该注意哪些问题?属性不再是一种担心(我认为),因为它会混淆名称。我知道我可以使用transient关键字,因此服务器数据不会在RPC调用中发送到客户端。

最好的是一个注释我可以放在方法上,让GWT编译器知道它永远不应该编译这个方法,这样我知道它永远不会进入已编译的javascript。

最后,如果我保持代码分离,对于这样的情况有最好的做法吗?

2 个答案:

答案 0 :(得分:0)

如果我理解你的问题,我会说这不是一个好的设计。共享目录中的序列化对象应该是纯POJO,您不应该在这些类中混合使用业务逻辑。

答案 1 :(得分:0)

我发现一个解决方法主要解决了我的问题。

我可能有一个类调用我的代码的服务器组件,这会使GWT编译崩溃,因为它无权访问该类(比如它是com.myproject.server.Class1)。我可以在gwt.xml文件中覆盖GWT中的包实现(在这里看到http://code.google.com/p/google-web-toolkit-doc-1-5/wiki/DevGuideModuleXml)并创建一个com.myproject.client.com.myproject.server.Class1类来实现被调用的方法,但是可以返回null 。这样GWT就有一个可以编译的链接类。稍后在GWT编译中它应该删除这个类/方法,因为它永远(希望)在GWT中被调用。

这可能是一个非常糟糕的解决方法,但如果仔细完成可以工作。