一尘不染

在Hibernate实体和数据传输对象之间进行转换的良好模式是什么?

java

关于如何在Hibernate实体和Web服务要返回的数据传输对象之间进行转换,我也有类似的问题和疑虑,如以下问题所述:

此处提到的因素之一是,如果域模型发生更改,则在Web服务的情况下,一组DTO将保护使用者。

即使看起来它将为我的项目添加大量代码,这种推理也似乎是合理的。

是否可以使用一种好的设计模式将一个Hibernate实体(实现一个接口)转换为一个实现相同接口的DTO?

因此,假设以下两个实现都为“ Book”,则需要将BookEntity.class转换为BookDTO.class,以便让JAXB序列化并返回。

再次,整个前景对我来说似乎令人怀疑,但是如果有好的模式可以帮助您处理这种转换,我很想获得一些见识。

也许有一些有趣的方式可以通过反射进行转换?还是我没有想到的“构建者”模式?

我是否应该忽略DTO模式并传递实体?


阅读 163

收藏
2020-12-03

共1个答案

一尘不染

我是否应该忽略DTO模式并传递实体?

我的偏好通常是“是”。我不喜欢仅出于架构或图层纯洁性而创建的并行层次结构的想法。

DTO模式的最初原因是当将实体EJB传递到视图层时,EJB 1.0和2.0应用程序中的聊天过多。解决方案是将实体bean状态放入DTO。

通常,创建DTO的另一个原因是禁止视图层进行修改。在这种情况下,DTO是不可变的对象,没有任何行为。他们除了将数据传送到视图层外什么也不做。

我认为DTO是一种核心J2EE模式,已经成为一种反模式。

我意识到有些人会不同意。我只是提供我的意见。这不是唯一的方法,也不一定是“正确”的方法。这是我的偏爱。

2020-12-03