Смена одного dto на другой - PullRequest
0 голосов
/ 29 октября 2019
@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class GenerateDaByContextDto {
    private String cNumber;
    private BusinessContext businessContext;
    private String zCode;
    private String yCode;
    private String xCode;
    private String event;

    public GenerateContentDto toGenerateContentDto() {
        return GenerateContentDto.builder()
                .businessContext(businessContext)
                .event(event)
                .build();
    }
}

Я делал обзор кода, когда мне стало интересно, можно ли так менять DTO? Необходимость была в том, что некоторые методы имеют GenerateContentDto в качестве параметра и его можно получить из GenerateDaByContextDto DTO в коде. Есть ли другой вариант, чтобы сделать его лучше? Это хорошо в отношении SRP правила? Я упростил поля DTOs.

Ответы [ 2 ]

1 голос
/ 29 октября 2019

Строго говоря, он основан на мнениях и зависит от проекта.

Но давайте вспомним принцип единой ответственности . DTO отвечает за хранение данных между слоями, а не за преобразование. Я предпочитаю иметь простой конвертер с таким методом, как:

public class GenerateDaByContextDtoConverter {
    public GenerateContentDto convert(GenerateDaByContextDto source) {...}
}

По той же причине обычно DTO являются неизменяемыми. Вы можете использовать аннотацию lombok @Value.

Еще одно решение может быть композиционным, если оно соответствует бизнес-логике:

class GenerateDaByContextDto {

    private GenerateContentDto generateContentDto;
    ...
}
0 голосов
/ 29 октября 2019

Вы можете заменить @Getter, @Builde r, @AllArgsConstructo r, @NoArgsConstructor на @Data

. Это лучший способ сделать это

@Data
public class GenerateDaByContextDto {
    private String cNumber;
    private BusinessContext businessContext;
    private String zCode;
    private String yCode;
    private String xCode;
    private String event;
/*
    public GenerateContentDto toGenerateContentDto() {
        return GenerateContentDto.builder()
                .businessContext(businessContext)
                .event(event)
                .build();
    }
*/
}
...