转换模型的最佳方法

时间:2019-06-18 14:49:50

标签: java spring model-view-controller service architecture

我在Web应用程序中具有控制器层,该控制器层应从外部服务运行一些操作并发送ExternalServiceDTO。我的控制器层与ControllerDTO一起使用。我有ControllerDTO的域模型-它是具有域服务DomainModelService的DomainModel。

转换模型的最佳方法是什么?我看到2个选项

  1. ControllerDTO-> DomainModel-> ExternalServiceDTO这样,我们 首先准备转换为领域模型,然后再准备外部 dto。外部dto将通过DomainModelService创建。

  2. ControllerDTO-> ExternalServiceDTO这样,我们只是在准备 来自控制器dto的外部dto

请咨询

2 个答案:

答案 0 :(得分:0)

您可以使用库Model Mapper。

<dependency>
    <groupId>org.modelmapper</groupId>
    <artifactId>modelmapper</artifactId>
    <version>2.3.4</version>
</dependency>

要将DTO转换为实体,可以使用以下命令:

      private Entity toEntity(DTO dto) throws ParseException {
          Entity entity = modelMapper.map(dto, Entity.class);
          return entity;
     }

在您的控制器上,您应该通过以下方式注入Mapper:

     @Autowired
     private ModelMapper modelMapper;

答案 1 :(得分:0)

我将使用实现构建器设计模式的@Builder批注(Lombok)来解决此问题。这就是我在日常编码生活中执行此操作的方式。

public RecordingMetaDataDto toDto(RecordingMetaData metaData) {
    return RecordingMetaDataDto.builder()
            .id(metaData.getId())
            .filename(metaData.getFilename())
            .bucket(metaData.getS3Resource().getBucket())
            .s3key(metaData.getS3Resource().getS3key())
            .durationInMinutes(metaData.getDurationInMinutes())
            .startTime(metaData.getStartTime())
            .endTime(metaData.getEndTime())
            .deviceIdentifier(metaData.getDeviceIdentifier())
            .processingStatus(metaData.getProcessingStatus())
            .storageClass(metaData.getStorageClass())
            .createdAt(metaData.getAudit().getCreatedAt())
            .createdBy(metaData.getAudit().getCreatedBy())
            .modifiedAt(metaData.getAudit().getModifiedAt())
            .modifiedBy(metaData.getAudit().getModifiedBy())
            .build();
}

Maven的龙目岛依赖性:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>