Spring Boot 在DTO中包含 @Configuration 是否是不好的做法[已关闭]

eyh26e7m  于 2022-11-23  发布在  Spring
关注(0)|答案(1)|浏览(170)
    • 已关闭**。此问题为opinion-based。当前不接受答案。
    • 想要改进此问题吗?**请更新问题,以便editing this post可以用事实与引用来回答.

11天前关闭。
此帖子已在5天前编辑并提交审核,无法重新打开:
原始关闭原因未解决
Improve this question
我有一个DTO。

@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CustomDTO {

    @NotNull
    @NotBlank
    @Pattern(regexp = "[a-f0-9]{8}(?:-[a-f0-9]{4}){4}[a-f0-9]{8}", message = "waited pattern: '123e4567-e89b-12d3-a456-426655440000'")
    private String documentId;

    ...
}

现在,我想使用SpringCloudConfig来配置它。
在我的.yml文件中:

patterns:
  document-id: "[a-f0-9]{8}(?:-[a-f0-9]{4}){4}[a-f0-9]{8}"
  document-id-message: "waited pattern: '123e4567-e89b-12d3-a456-426655440000'"

我的配置类:

@Data
@Configuration
@ConfigurationProperties(prefix = "patterns")
public class PatternsConfiguration {

    @NotNull
    private String documentId;
    @NotNull
    private String documentIdMessage;

}

现在,我的DTO将为:

@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CustomDTO {

    private final PatternsConfiguration patternsConfiguration; //Is it BAD Practice?

    @NotNull
    @NotBlank
    @Pattern(regexp = patternsConfiguration.getDocumentId(), message = patternsConfiguration.getDocumentIdMessage())
    private String documentId;
    ...
}

在Spring Boot的DTO中包含@Configuration类是不是不好的做法?

    • 如果是,有哪些技术上的错误解释?**
piztneat

piztneat1#

有趣的想法,但它让您失去了DTO的一个重要功能:
你不能再交换你的DTO类了。如果其他Java应用程序想使用你的API,你可以把你的DTO类给他们。很简单。
现在将配置类连接到您的DTO中会使共享过程变得非常麻烦,而且版本控制也会变得更加困难。
接下来的事情:现代环境中使用Interface Definition Languages (IDL)的频率更高,OpenApi非常流行。
如果你想把你的API转换成IDL,那么当validation-field隐藏在configuration. yaml中的时候,这就困难得多了。

相关问题