当前位置: 首页 > 知识库问答 >
问题:

在DTO中包含@Configuration是不好的做法吗

曹焱
2023-03-14

我有一个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 类是一种不好的做法吗?

共有1个答案

田鹤轩
2023-03-14

有趣的想法,但它让你失去了DTO的一个重要功能:< br >你不能再兑换你的DTO级。如果另一个java应用程序想要使用你的API,那么你可以给他们你的DTO类。简单。

现在将配置类连接到您的 DTO 会使这种共享过程非常烦人。版本控制也将更加困难。

下一件事:现代环境更多地使用接口定义语言(IDL ), open API非常受欢迎。< br >如果您想将您的API转换成IDL,那么当验证字段隐藏在configuration.yaml中时,会更加困难

 类似资料:
  • 问题内容: 我的问题如下。我应该避免在Angular应用程序中使用任何种类的jQuery代码,因为与DOM交互只有一件事是合法的。另一个问题是,是否有人遇到无法找到其他解决方案但只能用jQuery快速编写代码的问题。 谢谢! 问题答案: 是的,这是一个不好的做法,但是有时它可以为您节省很多时间,特别是在您寻找插件时,仅在必要时执行此操作,并在其他解决方案可用时记下备注以将其切换回原来的状态。

  • 假设我有一个类来为游戏中的一个项目建模,如下所示: (假设正确重写的和以比较内部枚举) 现在我想要一种方法来用中的getter来区分这些项:我应该返回还是名称?一般情况下返回是好的做法吗?或者是否有更好的方法来区分这些s?因为返回枚举类似于向我公开rep,而且我不希望我的同事直接使用来比较的 我想到的办法如下: 执行类似; 要执行; ; 要执行; 我不知道该怎么做,我希望有经验的程序员能给我一些启

  • 问题内容: 我正在查看一位同事的代码,但遇到一段类似于以下代码的代码: 我相信没有必要,但我很难证明这一点。如果它更具体(,等等)可能很有意义,但是因为我认为这是不必要的。有人可以给我一些原因,这可能导致什么问题,以及为什么这是不好的做法?还是这个代码可以吗? 问题答案: 该声明是方法合同的一部分。定义合同时,您应始终尽可能 精确 。因此,说是个坏主意。 出于同样的原因,这是不好的做法,因为不好的

  • 我正在开发一个简单的论坛Web应用程序使用SpringMVC, JPA2.我创建了反映数据库表结构的JPA实体,如用户、论坛、帖子等。 但是,当在UI上显示数据时,我需要DTO,因为我不能始终使用实体保存要在UI上显示的数据。 例如:更改密码屏幕。在这里,我需要持有旧Pwd,新密码和确认新Pwd。但是用户实体没有旧/新/确认Pwd字段,它只有密码。所以我需要创建DTO,它只是网络和服务层之间的数据

  • 问题内容: 过去,我使用以下方法读取大量代码: 这样做是惯例吗? 优点和缺点是什么? 在我看来,这就像完成异常的“ Agent Orange”方式 编辑 处理方法中的预期异常 引发意外异常(一对一) 不在乎错误 那是路要走吗? 问题答案: 你不应该扔。这就是为什么。 Throwable是可抛出的事物层次结构的顶部,由and组成。由于根据定义是由不可挽救的条件引起的,因此将它们包括在方法声明中是没有

  • 问题内容: 我正在开发一个显示图像并播放数据库声音的应用程序。我正在尝试确定是否使用单独的JFrame从GUI向数据库添加图像。 我只是想知道使用多个JFrame窗口是否是一种好习惯? 问题答案: 我只是想知道使用多个JFrames是否是一种好习惯? 坏习惯(坏习惯)。 用户不友好:用户只希望看到一个图标时,会在任务栏中看到多个图标。加上编码问题的副作用。 * 编写和维护代码的噩梦: * 一个模态