第八章:防御式编程
1、什么是防御式编程?为什么需要?
防御式编程不是指不让别人批评你的代码,而是指确保你要承担的责任,保证你的方法不会因为传入错误数据而破坏,看似微小的防范,收益可能大于你的想象,能够让错误更容易发现,修改,并减少对已经编写代码的修改
2、如何使用防御式编程?
在开发阶段,建议不从产品角度考虑,建议让错误暴露的越明显越好,能更快的排查错误;在产品上线时,防御式编程的代码可能影响性能以及体验,需要适当修改,但是需要根据场景考虑,比如银行设备以及普通网站,不同产品,错误处理方式不一样;
隔离程序与参数,即对参数进行验证,使之能包容错误造成的损害,并进行适当处理;
3、如何对错误进行处理?处理的方式
需要根据实际场景,程序是更需要健壮性还是正确性,一般普通的消费产品更倾向于健壮性,但和数据相关,则更倾向于正确性;建议在架构设计上就决定好如何处理错误,是异常还是其他的方式。
4、关于异常
避免在构造和析构函数中使用异常;考虑创建一个集中的方式处理异常,能够为一些与异常有关的信息提供集中的存储;把项目中对异常的使用标准化,考虑创建抛出异常的基类,这样就能把记录日志、报告错误等操作集中起来并标准化;不滥用异常,应该在异常和其他错误处理手段进行权衡,如果某些错误能局部处理,那就局部处理它;
第九章:伪代码编程过程
最主要的优化还是在于完善高层的设计,而不是完善每个子程序
Key Points:
创建类和子程序通常都是一个迭代的过程。在创建子程序的过程中获得的认识常常会反过来影响类的设计
编写好的伪代码需要使用易懂的英语,要避免使用特定编程语言中才有的特性,同时要在意图的层面上写代码,描述该做什么,而不是要怎么去做
伪代码编程过程是一个性质有效的做详细设计的工具,它同时让编码工作更容易。伪代码会直接转化为注释,从而确保了注释的准确度和实用性。
不要只停留在你想到的第一个设计方案上。反复使用伪代码做出多种方案,然后选出其中最佳的一种方案再开始编码
每一步完成后都要检查你的工作成果,还要鼓励其他人帮你来检查。这样你就会在投入精力最好的时候,以最低的成本发现错误。
第十章 :使用变量的一般事项
隐式变量声明对于任何一种语言来说都是最具危险性的特性之一(动态语言不都是这样的吗)。要求显式声明数据的语言实际是在提醒你要更加仔细的使用这些数据。
开始时采用最严格的可见性,然后根据需求扩展变量的作用域
你能够隐藏的信息越多,在同一时间所需要考虑的信息就越少
Key Points
数据初始化过程很容易出错
最小化每个变量的作用域。把同一变量的引用点集中在一起。把变量限定在子程序或类的范围内。避免使用全局数据
把使用相同变量的语句尽可能集中在一起
早期绑定会降低灵活性,但有助于减少复杂度。晚期绑定可以增加灵活性,同时增加复杂度
把每个变量用于唯一的用途