1、有意义的命名
2、函数要短小
3、函数只做一件事
4、每个函数一个层级
5、if-else,switch经常可使用状态模式等重构
6、输入参数有尽量少
- builder模式
- test(s) -> s.test()
7、无副作用 -> 即只做一件事
如:checkPassword(),则方法里只做检查,不可以改变其他状态
8、分隔指令与查询
如:不可以 boolean set(String name)。改成 boolean checkAndSet(String name) 可以勉强接受
9、能通过命名等方式说明函数的用途的,可不写注释
10、数据结构应该隐藏它的成员变量,通过接口访问
11、对象应该隐藏数据,暴露操作
f.getA().do()不合适,若f是数据结构则可以
12、过程式代码:
if(shape intanceof A){ doA();}
else if(shape intanceof B){d0B();}
面向对象式代码:
A implement Shape
B implement Shape
shape.do();
过程式代码难以添加新的数据结构,因为所有用到此处逻辑的地方都要改,方便添加新的函数
面向对象代码难以添加新的函数,因为每个对象都要添加新函数,方便添加数据结构
13、代码必须写junit(没怎么实践过~~~)
14、模板模式
15、输入参数不该有boolean,它说明函数不止做一件事情
16、常量 VS 枚举(感触比较深的只有这俩点)
- 通过常量来接受值时,可能传入不在常量类范围的值
- 常量类是String类型时,不能用==对比,只能用equals对比,不能优化性能。