具有业务对象、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 合并到数据库

在 TypeScript 和 NestS 中将类转换为类/对象(实体到 DTO)

Dto数据传输对象

我应该在哪里进行转换:域对象<-> DTO?

我应该将实体(持久)对象转换为 DTO 对象吗?

应该使用哪个层从域对象转换为 DTO