拥有公共数据对象是不好的做法吗?

时间:2017-04-22 08:32:58

标签: java

NASA用于编写安全关键程序的编码rules之一是:

Declare data objects at the smallest possible scope

我的问题是,如果我有一个大型数据对象,我想传递怎么办?我是否应该在超出范围(例如包级别)时将对象解析为较小的对象?如果需要传递给多个包怎么办?我是否每次都必须创建一个包级对象?

编辑:澄清一下,我指的是POJO,可能是通过反序列化API响应获得的。这段时间我一直在用公共领域制作POJO课程。

1 个答案:

答案 0 :(得分:1)

显然,如果某个类的对象必须在不同的包中进行操作,那么类本身或它实现的某个接口必须具有public可见性。但这并不意味着你需要将关于班级的每一个细节都暴露给公众审查或干预。规则只是说你不应该,不,一定不能,暴露每一个细节。

显然,某些细节必须公开可见,否则该课程不会太有用。但是几乎总有一些其他细节都不属于公众的业务,而且规则告诉你,你需要确定哪些细节是哪些,而不公开这些细节,实际上,没有公众的业务

该规则还涉及变量声明的范围:在尽可能小的范围内声明事物。例如,如果您需要一个变量来暂时保留结果,请在方法中声明一个局部变量:

// YES
public class C {
    private void meth1(){
        int x = ...
    }
}

不是包含类中的实例变量:

// NO!
public class C {
    private int x;    // an even worse sin would have been to make x public

    private void meth1() {
        x = ...
    }
}