在客户端和服务器之间共享 GWT 类实现
Posted
技术标签:
【中文标题】在客户端和服务器之间共享 GWT 类实现【英文标题】:Sharing GWT class implementation between client and server 【发布时间】:2012-11-13 16:55:07 【问题描述】:假设我在 GWT 中有一个比 POJO 更复杂的类实现,但它的方法仍然相对简单,即除了它的 getter 和 setter 之外,它还有一些实用方法,这样我就可以成功地调用 new Foo()客户端和服务器代码。
我的问题是:如果我有这样一个对象的实例,我如何在 GWT 服务器和客户端之间进行通信?也就是说,如何在对象反序列化时既能传输其字段,又能保留调用其他方法的能力?
我们目前在服务器端使用 Jackson,在客户端使用 AutoBeans,但这仅限于 POJO 类,因为 AutoBeans 来自仅包含 getter 和 setter 的接口,并且无法(自动)将数据拉入更有用的对象。
为了完整起见,这里是有问题的对象http://pastebin.com/H2ea0W6A
【问题讨论】:
你能否将数据分离成一个 bean 发送到服务器,另一方面有一个对象与客户端和服务器之间共享的逻辑? 【参考方案1】:您实际上可以使用@Category
:https://code.google.com/p/google-web-toolkit/wiki/AutoBean#Categories
但它不适用于您的 setKWHR
和 getKWHR
(至少如果命名为属性访问器)。
将这些方法从 Energy
类中移出以将其仅保留为 DTO 可能会更容易。
或者,将这样的 DTO(至少在客户端,DTO 是 AutoBean)包装到另一个可以带来逻辑的对象中(并简单地将 getMMBTU
和 getDisplayUnit
委托给包装的 DTO)。
或者使用Piriti之类的东西在客户端进行反序列化,而不是使用AutoBeans;或将您的 AutoBean 数据复制到 Energy
实例中。
【讨论】:
很公平,尽管这正是我所担心的:没有办法在“幕后”做这件事,而且在需要这些额外方法的任何时候都需要额外的代码(或者调用它) ,或以某种方式复制/包装数据) 我之前研究过@Category,它非常麻烦,因为它需要为我们想要使用的每种类型创建工厂(而不是所有类型共享的单个工厂)以上是关于在客户端和服务器之间共享 GWT 类实现的主要内容,如果未能解决你的问题,请参考以下文章
在 2 个 GWT 项目之间共享 RemoteService 实现