【问题标题】:Java DTO and final fieldsJava DTO 和最终字段
【发布时间】:2020-05-18 10:58:57
【问题描述】:

关于 DTO(数据传输对象)和带有 final 修饰符字段的 java 实现存在问题。

事实上。所有 DTO 必须在一个地方(构造函数)创建,而 DTO 内部没有任何逻辑。如果有多个来源 - 有聚合服务,它可以收集所有数据并将其放入新的 DTO。具有最终字段的 DTO 也将更具可预测性。不是吗?

例子:

 @Getter
 class FooDto {
   private final ... fooField;
 }

问题是:我应该在 DTO 的字段上使用 final 修饰符吗? 我没有找到确切的 DTO 信息。但在我看来 - final 是个好点。

【问题讨论】:

  • 当然,如果你愿意的话。你可以让所有东西final...直到你意识到你需要重新分配它们。但是你确定final 就足够了吗?不可变对象呢?
  • 为什么要重新分配 DTO 字段?它只是没有任何逻辑的 DTO。 POJO 将某种格式的数据传输到另一个系统。
  • 如果 DTO 用于传入数据(其中值可能由框架设置),这会起作用吗?
  • 您现在可以在大多数框架中使用不可变实体。只要您有一个包含所有可用字段的构造函数。不过,您可能需要在构造函数上添加一些注释,具体取决于框架。
  • 我没说你应该。但是final 修饰符不太可能对代码质量产生很大影响。在大多数情况下,代码流应该保证无论如何都不会意外发生任何重新分配,如果有人故意这样做,您无法阻止这种情况的发生(他们总是可以删除final 修饰符)。所以这取决于你,但它不会产生重大影响。

标签: java pojo dto final


【解决方案1】:

您的问题没有正确和错误的答案。虽然,使用 here 中提到的 final 字段是一种很好的做法

如果您在 return 语句之前无法进一步控制您的字段,那么您最好使用 final 字段。您应该考虑将“不可变对象设计模式”作为一种好的做法。

如果您需要在返回对象之前进行第二次检查,那么您可以删除 final 修饰符并使用库进行映射并避免额外的代码。你可以使用Mapstruct

【讨论】:

    猜你喜欢
    • 2023-02-11
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 2019-05-13
    • 2015-08-01
    相关资源
    最近更新 更多