Лучший способ конвертации моделей - PullRequest
0 голосов
/ 18 июня 2019

У меня есть уровень контроллера моего веб-приложения, который должен выполнить какое-то действие из внешнего сервиса и отправить ExternalServiceDTO.Мой уровень контроллера работает с ControllerDTO.У меня есть модель домена для ControllerDTO - это DomainModel со службой домена DomainModelService.

Каким будет наилучший способ преобразования моделей?Я вижу 2 варианта

  1. ControllerDTO -> DomainModel -> ExternalServiceDTO Таким образом, мы сначала конвертируем в модель предметной области, прежде чем готовить внешний dto.Внешний dto будет создан из DomainModelService.

  2. ControllerDTO -> ExternalServiceDTO Таким образом, мы просто готовим внешний dto из контроллера dto

Пожалуйста, советуйте

Ответы [ 2 ]

0 голосов
/ 18 июня 2019

Я бы подошел к этому решению с аннотацией @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();
}

Зависимость Lombok для maven:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>
0 голосов
/ 18 июня 2019

Вы можете использовать библиотеку Model Mapper.

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

Для преобразования DTO в Entity вы можете использовать это:

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

На вашем контроллере вы должны ввести Mapper:

     @Autowired
     private ModelMapper modelMapper;
...