关于codereview

2018-11-08  本文已影响0人  firefly_

出发点:


基础——基本功能和性能保证

  1. 代码规范、必要注释(方法注释、字段注释),代码可读性;
  2. 循环里面操作数据库(如果有,出发点是什么?);
  3. 保证功能的前提下的更优雅(高级)的写法?
    1.时间处理上使用java8 util.time(推荐) 和joda.time;
    2.java8 lombda、Stream使用优化for循环等、Optional判断空等;
    3.CollectionUtils、StringUtils、Objects、BeanUtils、Maps、Lists等工具类;
    4.Joiner.on(",").join(list) 数组转字符串拼接(注意list不能为空);
    5.String.format("%s", "这是一段文字") 的使用;
  4. 变量声明位置(就近原则);
  5. 空指针判断;集合取子集合是否会越界,字符串取子串是否会越界(推荐使用StringUtils.left(str,length));
  6. 是否会有并发问题;
  7. 事物异常捕获是否需要回滚事物;
  8. BigDecimal精度问题(使用BigDecimal(String val)来避免);
  9. String.replace()方法//用新变量接收; Arrays.asList(arrays),ImmutableMap.of() // 只读的不可变集合,不能再调用add(),set(),remove(),put()等方法;使用ImmutableMap.of(keys, values)方法时 key/value不能为空等容易忽视的地方;
  10. 缓存方案(redis缓存还是应用内缓存,根据实际业务分析不同方案可能出现的利弊进行取舍);
  11. 异常捕获。循环里面是否需要捕获异常来保证其中某个异常不会导致所有数据的执行;
  12. 日志规范:log日志最好包含方法名(如果方法名重复,建议再加上类名),且带上参数(log.error()强制要求打印出请求参数!)以便排查错误;
  13. 接口速度。响应时间是否够快(不超过200/300ms,返回数据发现不超过15kb),是否返回有保密要求的字段;
  14. update陷阱。update执行的时候,最好不要update整个对象,因为如果其他地方同时也在执行对其他字段的update操作,会覆盖更新,所以最好是重新new 一个对象,然后set需要更改的值,根据主键+忽略null字段的方式去更新数据;
  15. 事务+MQ。事务里面有循环语句,然后处理完数据生产者发送MQ,消费的时候因为事务还未提交,所以消费者查询的时候获取不到数据,这时候可以修改为发送延时MQ,或者是在事务之外发送MQ;
  16. 在合适的地方使用异常捕获,有的异常需要重试的,就不能捕获(例如MQ里面处理业务,如果发生了异常,就应该考虑是否应该抛出来,使用MQ消费异常自动重试机制来保证数据的准确性);

进阶 ——代码易读性和可维护性

  1. 运用设计模式,如使用策略模式精简大量if else if else 逻辑判断,使用责任链模式解决一系列的处理工作,便于代码拓展维护,提高系统灵活性;

带来的好处:


……未完结,待补充。

上一篇下一篇

猜你喜欢

热点阅读