是否有必要在POJO中拥有获取者和二传者

2022-09-05 00:08:04

我一直在浏览干净的代码手册,其中指出该类不应公开其数据的内部状态,而只应公开其行为。如果一个非常简单和愚蠢的java bean暴露了getter和setter的内部状态,难道不值得删除它们并使私有成员公开吗?或者只是将类视为数据结构?


答案 1

我不这么认为。这取决于对象的生存期及其“暴露”(外部修改)。

如果您仅将其用作数据结构,则以安全方式(最终)公开字段听起来就足够了:

public class Person {
    public final String firstName;
    public final String lastName;

    public Person(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
}

答案 2

术语 POJO 旨在将类与 JavaBeans 或任何其他约定区分开来。因此,根据定义,POJO不需要做任何事情。

我一直在浏览干净的代码手册,其中指出该类不应公开其数据的内部状态,而只应公开其行为。

这被称为封装,是一个很好的原则。

如果一个非常简单和愚蠢的java bean暴露了getter和setter的内部状态,难道不值得删除它们并使私有成员公开吗?

这是一种替代办法。一些项目可能禁止这种方法,而另一些项目可能鼓励这种方法。就个人而言,对于已经以某种方式封装的类,我更喜欢这种方法,例如它们是本地包。

有一种观点认为,有朝一日,你的类可能会有额外的要求,改变“API”是不可能的。这违背了YAGNI原则,很少被证明是这种情况,并且当它这样做时,它的成本比添加许多不做任何事情的方法要低得多。

但是,情况并非总是如此,如果不使用访问器方法,则应考虑以后必须更改项目时对项目的影响。随时随地使用访问器方法意味着您永远不必担心这一点。

总之,如果您非常确定访问器方法毫无意义,并且以后添加它们不会有问题,我会说您应该使用您的判断。但是,如果您不确定将来是否可能是问题,或者您不想担心它,请使用访问器方法。