为什么在Java中使用类作为结构是不好的做法?

2022-09-04 01:40:34

我们最近进行了代码审查。使用了我的一个类,以便我可以从方法返回/传递多种类型的数据。该类拥有的唯一方法是 getters/setters 。团队的一位成员(我尊重他的意见)说,有这样的课程是不好的做法(而且不是很OOP)。为什么?


答案 1

有一种观点认为,类应该是“数据结构”(即,专注于存储没有功能的数据)或“面向功能的”(即,专注于在存储最小状态的同时执行某些操作)。如果你遵循这个论点(这是有道理的,但并不总是容易做到的),那么这没有什么必然的错误。

事实上,有人会争辩说,bean和entity bean本质上是 - 带有getter和setter的数据容器。

我看到某些来源(例如,“干净代码”一书)认为应该避免使用具有多个参数的方法,而是将它们作为具有getter和setter的单个对象传递。这也更接近命名参数的“smalltalk模型”,其中顺序无关紧要。

所以我认为,如果使用得当,你的设计是有意义的。


答案 2

请注意,这里有两个单独的问题。

  1. “类似结构”的类是否合理?

  2. 创建一个类以从方法返回多个值是否明智?

类似结构的类

在大多数情况下,对象类应该表示一类真实世界的对象。一个被动的,类似结构的java bean(所有getter和setters)可能代表一个现实世界的东西。

然而,大多数现实世界的事物都有它们参与的规则,约束,行为和基本动词。类似结构的类很少适合现实世界的东西,它通常是一些技术性的东西。这使得它不太理想的OO设计。

从一个方法返回多个值

虽然Python有这个,但Java没有。多个返回值本身不是一个 OO 问题。这是一个解决语言限制的问题。

多个返回值可能意味着对象已更改状态。也许有一种方法更改了状态,并且某些 getter 组返回源自此状态更改的值。