POJO 是反面向对象 (OO) 吗?

Sof*_*per 5 java oop object pojo

在大多数定义中,POJO(Plain Old Java Object)是具有属性和 getter/setter 的对象。有些人将这些命名为 DTO。所以基本上它们就是我喜欢称之为“数据类”的东西。无论名称是什么,我都知道有这些对象只有 getter/setter。这些通常用于开发多层 MVC Web 应用程序 - 这些对象将通过不同的层传递。

也许我的问题有点自以为是——但这是否是纯粹的面向对象编程?我决心找出这个问题的答案,即什么是对的,什么是错的?

...因为,我从小就了解到 OOP 就是通过交互将现实生活中的场景/情况建模为对象。对象本身封装了数据和作用于这些数据的行为。- 在我看来,只有 getter/setter 的对象不符合这个定义。

此外,数据类很糟糕(代码异味)——这就是我在大学里教过的。

小智 1

不存在纯粹的 OOP 这样的东西。多年来,人们使用面向对象的方式发生了变化。

我更倾向于向我的类型添加行为(https://en.wikipedia.org/wiki/Domain-driven_design)。如果将类型视为数据容器 (POJO),则需要将该行为放在某处。通常称为 xxxService。这是一个额外的间接级别,只是为了做一些可能是“POJO”核心业务的事情。

编写更多代码后,您最终可能会在其他地方需要此功能。现在您需要将其提取给您可以共享的某个助手。这意味着您将有 2 个服务调用作用于您的 POJO 的相同方法。添加了另一个间接级别。

但这是做到这一点的一种方法。我参与过相当多的项目,很多开发人员都对 setter/getter 感到更舒服。如果你的团队对 setter/getter 感觉更舒服,为什么不呢。它不会杀死这个项目,但你必须每天都看到它;)