标签:替代 构造 数据 本地 一件事 get 相互 函数 模板方法
注释:注释只应该描述有关代码和设计的技术性信息;
通常作者、最后修改时间不该在注释中出现;
注释应该谈及代码自身没提到的东西;
删掉注释掉的代码,保持简洁;
环境:应当能够用单个命令签出系统,并用单个指令构建它;
应当能够发出单个指令就可以运行全部单元测试;
函数:函数的参数量应该少,没参数最好;
输出参数违反直觉,如果函数非要修改状态,就修改它所在对象的状态;
标识参数,消灭掉布尔值参数;布尔值参数告诉函数做了不止一件事,违反单一权责原则;
死函数,永不调用的方法应该被丢弃;
一般性问题:函数或类应该实现有理由期待的行为,函数名应该表达其行为;
如果你必须查看函数的实现(或文档)才知道它是做什么的,就该换个更好的函数名;
追索每种边界条件,并编写测试;
重复代码代表遗漏了抽象,重复的代码可能成为子程序或另一个类;
创建分离较高层级一般性概念与较低层级细节概念的抽象模型;基类应该对派生类一无所知;
限制类或模块中暴露的接口数量:类中的方法越少,函数知道的变量越少,类拥有实体变量越少;
垂直分隔:垂直距离要短,变量和函数应该靠近北使用的地方定义;
本地变量应该正好在其首次使用的位置上面被定义;
私有函数应该正好在其首次使用的位置下面被定义;
前后一致,小心选择约定,一旦选中,就小心持续遵循;
移除:没有实现的默认构造器,没有用到的变量,从不调用的函数,没有信息量的注释;
不相互依赖的东西不该耦合;删除死代码;
类的方法只应对其所属类中的变量的函数感兴趣,不该垂青其他类中的变量和函数;
选择算子参数;代码要尽可能具有表达力;通常应该倾向于选用非静态方法;
把逻辑依赖改为物理依赖;用多态替代if/else或switch/case;遵循标准约定;
用命名常量替代魔术数,魔术数(任何不能自我描述的符号);
结构甚于约定;封装条件;避免否定性条件;函数只该做一件事;
时序耦合,顺序调用;封装边界条件;函数应该只在一个抽象层级上,拆分不同抽象层级;
在较高层级放置可配置数据,位于较高层级的配置性常量易于修改;
避免浏览传递:避免a.getB().getC(),直接让协作者提供所需的全部服务;
名称:采用描述性名称:不要太快取名,确认名称具有描述性;
名称应与抽象层级相符;尽可能使用标准命名法;无歧义的名称:避免编码;
为较大作用范围选用较长名称;名称应该说明副作用:名称应该说明函数、变量或类的一切信息;
测试:测试足够;使用覆盖率工具;别略过小测试;测试边界条件;全面测试相近的缺陷;测试应该快速;
重复形态:最明显:明显一样的代码;可以用单一方法来替代;
较隐蔽:在不同模块中不断重复出现、检测同一组条件的switch/case或if/else链;可以用多态来替代;
更隐蔽:采用算法类似但具体代码行不同的模块;可以用模板方法模式或策略模式来修正;
标签:替代 构造 数据 本地 一件事 get 相互 函数 模板方法
原文地址:https://www.cnblogs.com/xiajia/p/9600047.html