数据传输对象中的公共字段

在我多年的编程中,我经常创建类,只需将一些变量与setter和getter组合在一起。 我已经看到这些类型的对象被称为值对象,域对象或模型对象,具体取决于它们使用它们的上下文。 通用用法的最合适的术语似乎是数据传输对象(DTO)。 这描述了仅包含访问器和增变器的POJO。

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

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

大多数程序员将默认使用getter / setter私有字段而不考虑它。 但就像任何货物崇拜的东西一样,最好做出有意识的决定。

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

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

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

如果这些属性都不适合您,则没有理由不使用公共字段。

不要期望有很大的性能差异:)

我不认为使用公共属性来设置“设置”或“主题”或“风格”类是非常糟糕的做法。

如果您想在设定时进行任何复杂的计算或检查值,那么使用重构工具的现代IDE可以将属性提升为getter / setter变得微不足道。

通常在你的’setTheme’或任何消耗这些设置类的函数是一个很好的干净的地方进行validation。

设置这样的设置时,通常需要执行深度复制的对象,而不是保留对可变类的引用。