我最近读了一些有关 DTO 模式的文章。我了解其目的;隔离内部并为客户创建合同。然而,我一直在思考如何有效地将它们映射到实体。
所以,假设我有 2 个 Dto; CreatePostDto 和 ReadPostDto 在几个字段中可能有所不同。现在,我想将它们映射到 PostEntity,这可以使用 modelmapper、mapstruct 等技术来完成。但是,将它们映射到服务层对我来说似乎不太有吸引力,因为代码往往会变得混乱。
一种方法是创建通用映射器抽象类并提供特定 dto 的实现。尽管如此,我对这种方法持怀疑态度,因为我可能有很多 dto,即很多 postDto,这会导致很多映射器类。
有更好的方法吗?
正如您所提到的,如果您使用 Mapstruct,您可以为每个实体构建一个映射器类。 Mapstruct 将为您实现样板代码,您可以将所有相关映射分组。例如:
public interface PostMapper {
public PostEntity createPostDtoToPostEntity(CreatePostDto dto);
public PostEntity readPostDtoToPostEntity(ReadPostDto dto);
}
即使您的 Post DTO 不断增长,您仍然可以将它们分组到这个映射器类中。
我知道这是非常古老的线程。我想在这里添加我的方法,为什么不能直接使用 ModelMapper,而不对每个 DTO 到实体映射进行自定义实现。 ModelMapper modelMapper = new ModelMapper(); modelMapper.map(SourceObjectInstance, TargetObject.class);
如果我们需要特定对的任何特殊映射,仍然可以在 ModelMapper 中配置。