【问题标题】:Sharing classes between GWT and AppEngine在 GWT 和 AppEngine 之间共享类
【发布时间】:2012-11-01 12:56:03
【问题描述】:

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

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

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

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

【问题讨论】:

标签: google-app-engine gwt


【解决方案1】:

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

【讨论】:

  • 其实我觉得你错了。如果我在服务器上需要一只猫,在客户端需要一只猫,为什么我应该有一个 ClientCat 类、一个 ServerCat 类和一个 CatDTO,只是为了将 ClientCat 传输到 ServerCat。所有猫的喵喵叫、吃饭和睡觉,所以我必须至少写两次所有这些方法,唯一的区别是 ServerCat 有一些只能在服务器上执行的操作,我不希望它与用户共享。这似乎是一个很好的设计。
【解决方案2】:

我找到了一种主要解决我的问题的解决方法。

我可能有一个调用我的代码的服务器组件的类,这将使 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 中被调用。

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

【讨论】:

    猜你喜欢
    • 2017-10-04
    • 1970-01-01
    • 2013-06-09
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    • 1970-01-01
    相关资源
    最近更新 更多