关于如何在Hibernate实体和Web服务要返回的数据传输对象之间进行转换,我也有类似的问题和疑虑,如以下问题所述:
在ejb3中使用数据传输对象被认为是最佳实践
此处提到的因素之一是,如果域模型发生更改,则在Web服务的情况下,一组DTO将保护使用者。
即使看起来它将为我的项目添加大量代码,这种推理也似乎是合理的。
是否可以使用一种好的设计模式将Hibernate实体(实现一个接口)转换为实现相同接口的DTO?
因此,假设以下两个实现都为“ Book”,则需要将BookEntity.class转换为BookDTO.class,以便让JAXB序列化并返回。
同样,整个前景对我来说似乎令人怀疑,但是如果有好的模式可以帮助您完成这种转换,那么我很想获得一些见识。
也许有一些有趣的方式可以通过反射进行转换?还是我没有想到的“构建者”模式?
我是否应该忽略DTO模式并传递实体?
我的偏好通常是“是”。我不喜欢仅出于架构或图层纯洁性而创建的并行层次结构的想法。
DTO模式的最初原因是当将实体EJB传递到视图层时,EJB 1.0和2.0应用程序中的聊天过多。解决方案是将实体bean状态放入DTO。
通常,创建DTO的另一个原因是禁止视图层进行修改。在这种情况下,DTO是不可变的对象,没有任何行为。他们除了将数据传送到视图层外什么也不做。
我认为DTO是一种核心J2EE模式,已经成为一种反模式。
我意识到有些人会不同意。我只是提供我的意见。这不是唯一的方法,也不一定是“正确”的方法。这是我的偏爱。