看《代码整洁之道》的一些随笔记录,可能过于简洁,有部分遗漏。
一、原则
1、勒布朗法则(LeBlanc):稍后等于永不(Laterequals never)。不做临时性工作。
2、让营地比你来时更干净。每次签入时,代码都比签出时干净。
二、命名
1、名副其实,取名要提现实际意义。
2、避免误导, 别用专用名词,list之类。别用两个相差不大的名词
3、命名要能读出来
4、使用static final变量,易于寻找和统一
5、不要使用前缀,例如m_xxxx,没人会关注
6、不要使用IXXX来表示接口和抽象类
7、类名和对象名要用名词,不要用动词
8、方法名要用动词,属性访问等加get、set、is前缀
9、每个概念对应一个词,比如是Controller就全用他,不要用相似的词(driver、manager)
10、别用双关语
11、只要短名词足够清楚,就要比长名称好
三、函数
1、短小。If、else、while等其中的代码块就应该只有一行,函数的缩进层级不应该多于一层或两层。
2、只做一件事
3、自顶向下读代码
4、switch语句放到抽象工厂下面
5、函数参数要少,参数转换不如直接返回
6、使用异常替代返回错误码。
四、注释
1、注释代码删掉,放置以后没人敢删
五、格式
垂直概念
1、单个文件代码数量控制在200到500行
2、代码从上往下读,从左往右读
3、封包声明、导入声明、每个函数之间都有空白行隔开
4、紧密相关的代码应该互相靠近
5、代码的垂直距离,函数变量放在函数头,循环变量放在循环中,实体变量在java中应该放在类前面,函数调用应该放在一起,调用者应该放到被调用者前面。
横向概念
6、每行80到120个字符
7、空格加强分割效果,比如赋值语句,不在函数名和左圆括号之间加空格,函数中参数用逗号分割,乘法不用空格,加减法用空格,因为乘法优先级比加减法高
8、层层缩进
六、对象和数据结构
1、一切都是对象只是一个传说,数据结构和面向对象互相穿插
2、隐藏数据,暴露操作。方法不应调用由任何函数返回的对象的方法,函数之间不应连续调用,就跟火车车厢一样。
3、数据结构应该是一个只有公共变量、没有函数的类,DTO
七、错误处理
1、使用异常而不是错误码
2、先写try catch finally语句
3、包装别人的异常,抛出自己包装后的异常,在顶端处理自己的异常
4、别返回null值,上层需要对null做校验
5、别传递null值
八、边界
1、不要将map等其他类似的东西在系统中传递,可以用类封装map,然后提供操作该map的方法,隐藏map
2、装饰者模式
九、单元测试
十、类
1、封装
2、类应该短小,类的名称应当描述其权责
3、单一权责原则
4、内聚
5、隔离修改
十一、系统
1、抽象工厂
2、依赖注入,控制反转
3、aop
十二、迭进
1、重构,消除重复、保证表达力、尽可能减少类和方法的数量
十三、并发编程
1、单一权责:分离并发相关代码与其他代码
2、限制数据作用域:synchronized,严格限制对共享数据的访问
3、使用数据副本
4、线程尽可能独立
5、java concurrent包等
6、尽可能减小同步区域
十四、逐步改进
十五、Junit内幕
十六、重构SerialDate
十七、味道与启发
使用多态代替ifelse、switchcase