【发布时间】: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修饰符)。所以这取决于你,但它不会产生重大影响。