Day13-编码规约的思考

155 阅读2分钟

一、前言

都说代码是程序员的第二张脸。我们的才华应该表现在设计良好的结构和模式,表现在干净易懂的代码,表现在对空间的尊重,对代码的尊重。代码不是一次性的,需要重复的修改和重构,为未来写点代码。

二、写干净整洁的代码,请尊重空间,请尊重人眼的偏好

  1. 去除没有用到的类引用。
  2. 记得格式化代码。
  3. 不要吝惜废弃的老代码。
  4. 请不要写冗余无用的代码。
  5. 请合理运用空行。
  6. 请不要在两个地方出现完全相同的代码?
  7. 命名类,方法,变量慎用简写,除非大家都公认。
  8. 把所有的类变量放到最前面,如果比较多请按用途分组排列,不要把变量散落在大江南北。
  9. 拆分大的类,大的方法。

三、高效运用注释

  1. 规范的注释类信息。可以查看一下Java标准库的String.java源码,包括文件名,日期,作者,版本号等信息,用统一的模板。
  2. 非Java Bean的public方法都需要注释。
  3. 为不容易理解类变量注释。
  4. 注释代码段,注释逻辑选择。 如果有if else等逻辑选择的时候,写上判断的依据和结果。

四、Mybatis与SQL规范

  • 表名、字段名、索引等数据结构定义大小写: Oracle大写, MySQL小写。名称使用英文+下划线,并控制总长度,如 user_name。
  • 表名建议采用“模块标识_”前缀,如 bas_user(如果模块库独立可省略模块名标识)
  • 禁止程序中的SQL使用并行计算 /+parallel(t,n)/
  • SQL使用标准SQL,避免出现数据库特定的语法
  • 未经评审不可直接使用视图、触发器、存储过程 SQL JOIN表数量不超过3张,超过3张表需要经过评审 (拆分成多次单表查询、主表冗余、程序绑定id-name映射、根据条件动态JOIN等)。
  • 合理创建索引,并尽量避免不走索引的情况: 如
    • LIKE右/任意匹配(‘%xx’, ‘%xx%’)不走索引, 换为“精确匹配=”或固定前缀的左匹配’张%’
    • 不等条件(!=、<>、NOT)不走索引,应尽量避免(转换成IN/BETWEEN等)
    • IS (NOT) NULL 不走索引,应尽量避免(如字段给定默认值,避免NULL)
    • 索引列使用函数或隐式转换都将导致索引失效,如 to_char(create_date,'yyyymmdd') = '20190102'
  • 禁止手动拼接SQL语句,利用Mybatis等ORM框架的动态SQL实现。 参数使用#{} (避免${}产生SQL注入问题)。
  • 禁止使用数据库处理函数 decode(),改为Java枚举或Map定义,通过id进行绑定 decode(client.TYPE, 1, '私客', 2, '店组公客', 3, '组团公客‘)
  • 禁止动态拼接时强加 1=1 之类的写法,如WHERE 1=1。使用Mybatis动态SQL标签实现,如,,
  • SQL中的参数类型确保与列定义一致,避免数据库隐式转换开销且无法使用索引,如:
    • 列定义为数字类型,参数不用String DEPT_ID = '123’
    • 列定义为日期类型,参数要转换为Date日期类型进行比较:
      CREATE_TIME <= '2019-04-14 23:59:59’
      CREATE_TIME <= to_date('2019-04-14 00:00:00','yyyy-MM-dd HH24:mi:ss’)
  • ID主键自增的情况下,按create_time排序改为按ID排序,效果一样效率更高