5.2 信息泄露
与信息隐藏相对应的是信息泄露(information leakage)。当一个设计决策反映在多个模块中时,就会发生信息泄露。这在模块之间形成了一种依赖关系:对该设计决策的任何改变都需要对所有相关的模块进行修改。如果一条信息被反映在一个模块的接口中,那么根据定义,它已经被泄露了;因此,更简单的接口往往与更好的信息隐藏相关。然而,即使信息没有出现在一个模块的接口中,它也可能被泄露。假设两个类都知道某种特定的文件格式(也许一个类读取该格式的文件,另一个类写入该格式的文件)。即使这两个类都没有在其接口中公开该信息,但它们都依赖于该文件格式:如果该格式发生变化,两个类都需要进行修改。像这样的后门泄露比通过接口泄露更为有害,因为它并不明显。
信息泄露是软件设计中最重要的危险信号之一。作为一个软件设计师,你能学到的最好的技能之一就是对信息泄露的高度敏感。如果你遇到了类之间的信息泄露,问问自己:“我怎样才能重新组织这些类,使这个特定的知识只影响到一个类?”如果受影响的类相对较小,而且与泄露的信息密切相关,那么将它们合并成一个类可能是有意义的。另一种可能的方法是从所有受影响的类中提取信息并创建一个仅封装该信息的新类。然而,这种方法只有在你能找到一个简单的接口来抽象出细节时才会有效;如果新的类通过其接口暴露了大部分知识,那么它就不会提供太多的价值(你只是用接口的泄露代替了后门的泄露)。
Last updated