CH5 格式
代码格式很重要,原始代码修改很久后,可能代码不存在了,但是代码行文风格还是保留。
垂直格式
相关函数,调用者应该尽可能的放在被调用者的上方。
概念相关放在一起。
横向格式:
CH6 对象与数据结构
1 隐藏并非只是在变量之间放上一个函数层这么简单,隐藏实现关乎抽象。类并非简单实用取值,赋值函数,而是暴漏对象接口,以便用户不用了解数据实现,就能操作数据。
所以要以最好的方式呈现某个对象包含的数据,需要严肃的思考。
2 面向过程与面向对象
过程式的代码(使用数据结构的代码)便于在不改动数据结构的前提下添加新函数;
面向对象的代码(类,多态)便于不修改既有函数的前提下添加新类。
反过来:
过程式代码不适用与增加新的数据结构,因为所有的既存的任何函数都需要适应新的数据结构的实现。
面向过程的代码不适用于增加新函数,因为既存的所有类都需要添加新方法。
所以选择的时候需要根据具体情况而定。
3 law of demeter
方法不应该调用有任何函数返回对象的方法,只跟朋友讲话,不与陌生人谈话。
比如 final String outputdir = ctxt.getOptions().getScratchDir().getAbsolutePath();
正确的做法是让服务提供者,提供完整的服务,而不是到处去找。
比如上述的问题,可以试着看看这个outputdir使用者是怎么使用的,我们发现这个就是用这个目录来创建一个临时文件的,
正确的做法就是 bufferoutputstream = ctxt.createscratchFileStream(filename), 这个例子表示我们确实需要抽象出来,而不是仅仅返回类中的数据。