将一个 dto 更改为另一个

Changing one dto to another

@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 字段。

您可以将 @Getter ,@Builder,@AllArgsConstructor,@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();
    }
*/
}

严格来说,这是基于意见并取决于项目。

但是让我们记住single responsibility principle。 DTO 负责层之间的数据保存,而不是转换。我更喜欢有一个简单的转换器,方法如下:

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

出于同样的原因,通常 DTO 是不可变的。您可以使用 lombok 的 @Value 注释。

多一种解决方案可能是组合,如果它符合业务逻辑:

class GenerateDaByContextDto {

    private GenerateContentDto generateContentDto;
    ...
}