Dto - 实体映射最佳实践

问题描述 投票:0回答:2

我最近读了一些有关 DTO 模式的文章。我了解其目的;隔离内部并为客户创建合同。然而,我一直在思考如何有效地将它们映射到实体。

所以,假设我有 2 个 Dto; CreatePostDto 和 ReadPostDto 在几个字段中可能有所不同。现在,我想将它们映射到 PostEntity,这可以使用 modelmapper、mapstruct 等技术来完成。但是,将它们映射到服务层对我来说似乎不太有吸引力,因为代码往往会变得混乱。

一种方法是创建通用映射器抽象类并提供特定 dto 的实现。尽管如此,我对这种方法持怀疑态度,因为我可能有很多 dto,即很多 postDto,这会导致很多映射器类。

有更好的方法吗?

java spring spring-boot jakarta-ee dto
2个回答
1
投票

正如您所提到的,如果您使用 Mapstruct,您可以为每个实体构建一个映射器类。 Mapstruct 将为您实现样板代码,您可以将所有相关映射分组。例如:

    public interface PostMapper {
    
        public PostEntity createPostDtoToPostEntity(CreatePostDto dto);
        
        public PostEntity readPostDtoToPostEntity(ReadPostDto dto);

    }

即使您的 Post DTO 不断增长,您仍然可以将它们分组到这个映射器类中。


0
投票

我知道这是非常古老的线程。我想在这里添加我的方法,为什么不能直接使用 ModelMapper,而不对每个 DTO 到实体映射进行自定义实现。 ModelMapper modelMapper = new ModelMapper(); modelMapper.map(SourceObjectInstance, TargetObject.class);

如果我们需要特定对的任何特殊映射,仍然可以在 ModelMapper 中配置。

更多详细信息::https://modelmapper.org/user-manual/

© www.soinside.com 2019 - 2024. All rights reserved.