【发布时间】:2010-01-02 12:30:02
【问题描述】:
为了在基于 Servlet 的应用程序中使用,我编写了一个类来存储视图名称和要呈现的对象。实际上,它更像是一种数据结构,而不是 OOP 意义上的类。我想知道我是否应该公开成员或是否应该使用 getter。
public class Result {
private final int status;
private final String view;
private final Map<String, Object> model = new HashMap<String, Object>();
public Result(final int status, final String view) {
this.status = status;
this.view = view;
}
public Result put(final String modelName, final Object modelObject) {
model.put(modelName, modelObject);
return this;
}
}
我应该添加 getStatus()、getView() 和 getModel() 还是应该将成员可见性更改为“public”?目前,我不知道有什么方法可以访问成员。 “结果”是一个不可变的数据结构,访问成员时不需要计算。您会为实现更改的不太可能发生的事件添加 getter 吗?
附录
我在 Robert C. Martins 优秀书籍Clean Code(第 99 页)中阅读了与我的问题相关的部分:
混血儿
这种[关于对象和数据结构]的混淆有时会导致 不幸的混合结构是 半对象半数据结构。 他们有做的功能 重要的事情,他们也有 公共变量或公共 访问器和突变器,对于所有人 意图和目的,使私人 可变公开,诱惑他人 使用这些外部函数 变量程序的方式 将使用数据结构。
这样的混合体很难添加新的 功能,但也难以添加 新的数据结构。他们是 两全其美。避免创建 他们。它们表明混乱 作者不确定的设计 - 或者更糟的是,不知道——他们是否 需要保护功能或 类型。
【问题讨论】: