3.5.3 设计成功的抽象
经验以及重复是良好抽象的基础。只有经过多年的编写代码以及使用抽象,才能真正地设计良好的接口。当遇到其他抽象的时候,试着记住什么可行,什么不可行。您发现上周使用的Windows文件系统API有什么缺陷?如果您编写网络软件包,与您同事编写的有什么不同?最好的接口往往并不是一次就能得到的,因此要反复尝试。把您的设计交给同行征求他们的意见。如果您的公司有代码评审,可以将检查接口规范作为评审代码的开始,此后再开始实现。在开始编码后也不要惧怕修改抽象,哪怕这样做意味着强迫其他程序员进行改动,他们会意识到一个良好的抽象可以让每个人在很长一段时间内受益。
有时候您跟其他程序员交流自己的设计时应该传播点好消息。或许团队的其他成员没有意识到前面设计的问题,或者他们觉得按照您的方法工作量太大。在此类情况下,要准备好保护您工作并在适当的时候与他们进行沟通。
良好的抽象意味着接口只有公有行为。所有代码都应该在实现文件而不是类定义文件中。这意味着包含类定义的接口文件是稳定的,不会改变。
小心单一类的抽象。如果您编写的代码非常深奥,应该考虑用其他类配合主接口。例如,如果您公开一个完成数据处理的接口,还要考虑编写一个结果对象,从而提供一种简单的方法查看并说明结果。
当可能的时候,将属性转换为行为。换句话说,不要让外部代码直接操作类的数据。您不想让一些粗心的或者恶意的程序员把兔子对象的高度设置为负数,为此可以让"设置高度"行为进行边界检查。
值得再次一提的是重复,因为这非常重要。应该查找并回应设计中的缺陷,在必要的时候进行修改,并从错误中获取教训。