Gwt-rpc仅用于DAO。摆脱DTO

时间:2015-07-22 05:31:00

标签: gwt serialization dao dto gwt-rpc

我即将开始新的java项目,我认为GWT是我的框架。

我在互联网上查了很多文章(主要文件也是如此),我很困惑。

所以我问你:

我可以使用jpa实体与DAO一起使用,并通过网络发送给客户端吗?

我真的不明白DTO的概念(编写几乎相同但更差的模型类)

如果我要通过网络向客户端发送实体,如何使用Serializable Transient注释来序列化和发送方法,类的参数?它甚至可能吗?

如何通过正确的类实现扩展Generic Typed Superclass所有这些?

f.e:

public class GenericModel extends GenericModel<T> {
     //some generic code
}

public class RightModel extends GenericModel<RightModel> {
    // some right class code
}

DAO也一样......

请帮忙。 我依靠你的经验。

1 个答案:

答案 0 :(得分:1)

当时并不是说我是专家,但当我开始将Hibernate(不是JPA)和GWT结合起来时,这是一个痛苦。

你不能通过Hibernate托管对象发送的原因(我猜这与JPA相同,无论底层技术如何)是因为它们包含像 javassist 。 GWT根本不喜欢这样,你不能通过GWT RPC线发送这些对象。

当然,它也没有意义:当您在DAO上调用getter时,您不能指望您的Javascript(客户端)调用SQL来延迟加载集合(因为那样&#39;这些DAO对象在服务器端发生了什么,这就是javassist魔术在你背后所做的事情。

我不确定即使所有集合都被急切地加载,你的对象也将没有javassist的东西,并且可以通过GWT-RPC序列化。这留下了一个替代方案,即让POJO对象定制为仅包含那时客户端所需的那些部分(属性/集合) - DTO。

从那以后在GWT中发生了很多事情,我知道一些与RPC完全不同的东西,即RequestFactory(参见http://www.gwtproject.org/doc/latest/DevGuideRequestFactory.html)。我自己还没有用过它,但声称make it easy to build data-oriented (CRUD) apps with an ORM-like interface on the client。因此,如果您不想构建用于连接RPC的自定义类,这可能就是您的选择。