具有业务对象、DTO 和实体/域对象的数据转换模式
Posted
技术标签:
【中文标题】具有业务对象、DTO 和实体/域对象的数据转换模式【英文标题】:Data conversion pattern with Business Object, DTO and Entity/Domain Object 【发布时间】:2021-01-12 09:40:04 【问题描述】:在我的 Spring boot 项目中,我使用 hibernate,基本上我们有三种对象
在控制器层中使用的 DTO 对象。 业务对象 - 业务对象是我们在整个应用程序中使用的对象。 实体/域对象 - 用于 JPA 层。当我们准备好保存数据时,我们将业务对象转换为域/实体对象
当我们准备好将其发送给客户端/控制器时,我们可以将实体对象转换为 Business Obj,然后将这个 Business 对象转换为 DTO Obj。
理想情况下,我被告知将 BO 更改为 ->(DTO 和实体)以及反之亦然的转换逻辑驻留在 BO 本身中?
我们如何以有效的方式实现这一目标?谁能帮忙举个例子?
【问题讨论】:
【参考方案1】:此任务没有灵丹妙药,但您可以考虑使用模型映射器;这是一个简单的例子https://www.baeldung.com/entity-to-and-from-dto-for-a-java-spring-application
【讨论】:
【参考方案2】:我喜欢在我参与的所有项目中使用Mapstruct
我最喜欢它的几件事:
-
显然,您在编码转换上花费的时间更少(请查看主页上的“MapStruct in 2 Minutes”)
如果您要转换的类中的属性名称相同,那么您编写的代码就更少了。
它与spring集成得很好,所以不需要声明任何bean什么的,只要指定它是“spring”组件模型即可。
您可以通过多种方式映射实体 - 创建新实体,使用 DTO 中的值更新现有实体(例如)。
子对象也很容易映射。它具有内部机制,试图在其他映射器中选择正确的映射器方法。或者您可以自己指定其名称。
尽管您也可以查看ModelMapper。非常相似的库,但我自己较少使用。所以不能提出任何特别的建议。
【讨论】:
以上是关于具有业务对象、DTO 和实体/域对象的数据转换模式的主要内容,如果未能解决你的问题,请参考以下文章
JPA 模式:从实体生成数据传输对象 DTO 并将 DTO 合并到数据库