0

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

我不只创建一个共享类的原因是我不想将我的一些服务器所说的逻辑、方法和属性暴露给客户端。但我读到的是,当 GWT 编译时,它会从编译的代码中删除未使用的方法和属性。这是真的吗,这会保护我不想在客户端上看到的代码吗?有什么我应该注意的问题吗?属性不用担心(我认为),因为它会混淆名称。我知道我可以使用瞬态关键字,这样服务器数据就不会在 RPC 调用中发送到客户端。

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

最后,如果我将代码分开,这样的情况是否有最佳实践?

4

2 回答 2

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 中被调用。

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

于 2012-11-02T13:11:09.403 回答
0

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

于 2012-11-02T10:46:02.793 回答