java - 数据传输对象中的公共(public)字段

标签 java coding-style

在我多年的编程生涯中,我经常制作简单地将一些变量与它们的 setter 和 getter 组合在一起的类。我已经看到根据使用它们的上下文将这些类型的对象称为值对象、域对象或模型对象。最适合通用用法的术语似乎是数据传输对象 (DTO)。这描述了一个只包含访问器和修改器的 POJO。

我刚刚编写了一个这样的对象,其中包含大约 50 个字段,用于在图表上设置主题参数。现在我想知道是否应该将这些字段声明为公共(public)字段,而不是生成一百个 getter 和 setter。这样做违背了我的编程直觉告诉我的一切,但我不能否认它会大大提高我的代码的易读性并减少类中样板代码的数量。

我可以看到使用公共(public)字段的唯一原因是如果我需要对这些字段执行任何类型的验证。如果我们假设类型验证足以满足我的目的,那么在这种情况下使用公共(public)字段是否可以接受面向对象设计的突破?公共(public) DTO 会在大批量操作中表现更好吗?

最佳答案

大多数程序员会默认使用带有 getter/setter 的私有(private)字段而不考虑它。但就像任何 cargo 崇拜一样,最好做出有意识的决定。

使用 getter/setter 组合而不是公共(public)字段的主要原因是您可以更改定义。因此,如果您的 DTO 是组件之间接口(interface)的一部分,最好使用 getter。如果您更改内部工作原理,您可以调整 getter 以模仿旧行为并保持兼容性。

另一个原因是您可以设置只读字段。通常对于 DTO,只读和不可变是一个不错的选择。

第三个原因可能是您的 DTO 需要是 javabean,因为您打算在需要它的某些工具中使用它。

如果这些属性都不适合您,那么没有理由不使用公共(public)字段。

不过,不要期望有太大的性能差异 :)

关于java - 数据传输对象中的公共(public)字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16539238/

相关文章:

Java - 将数组直接传递到构造函数中,而不是作为变量

java - 英文数字的可扩展正则表达式

java - 如果我关闭底层可读文件,不关闭 Java Scanner 是否安全?

c# - 访问自己类(class)的成员 : use (auto)properties or not?

java - 按类查找元素,空格不起作用

java - LibGDX 在更新方法期间执行一次操作

coding-style - 在 IF block 中放什么,在 ELSE block 中放什么?

php - 我是否应该期望编程团队遵循严格的编码标准?

coding-style - 对《清洁代码》一书中关于处理 Null 对象的 Bob 叔叔解释感到困惑

c - 动态内存分配的流行用法