编码
通用
- 尽量少用static,除非是常量定义(现在用的也很少了)。
- 所有定义都需要有值,不管其是否有默认值
- null和empty的区别:null是不存在,empty是有但没有内容。
- 可能为空的对象,使用时要先检查为空,防止空异常
- 对外开放的函数定义成public,其他用private。
- 所有入口要有日志(@Log),特别是Controller层。重要业务要有业务流程日志,特别是对外接口。
- 编写测试用例文档和单元测试代码,保证质量
- 类的组包解包要成对出现,特别是类和json文本之间的转换。
- 深入分析 Java 中的中文编码问题
框架层
- 代码采用需求加载(类和变量的定义上加@Lazy(true))。
- 框架层和通用业务层:使用Lazy
- 业务层:所有使用层都需要(如user)则用Lazy
- 调用层(api,管理系统,任务服务X):不需要
- 加载时间长的功能要在使用层显式初始化(初始加载)
接口
- Controller层的函数需要确保向后兼容。通过版本号控制。如函数有输入输出调整,则版本号+1。新增新的逻辑,以前版本的逻辑不能修改。
service层的函数不能有版本号。
- 接口数据的规范(不允许对象空)。允许:null,[]。不允许:{}
数据
- 数据要有缓存
- 数据获取尽量用函数封装,可以处理异常情况。如map.get("xyz").toString()改用MapUtils.getString(map, "xyz");
- 数据源类型的数据(DataSource)和标准数据不能混用。区别:前者数量少量且恒定,后者数量可以很多。前者用下拉框,后者用搜索。
数据库
- 不能直接修改数据库结构,必须在代码层修改
- 所有表名要有前缀,如"thfinance"
- 数据库枚举字段(如状态)的使用
- 数量明确的用byte,预定义成类(和实体同层)
- 无限的用英文字符串(大写),放到业务系统的常量定义类(多层子类)。
- 表结构要有说明,字段说明写在类上,枚举字段的值写在常量定义类。
- 多对象组合时的新对象使用方法
- 不要用sql获取
- 选择一个做为主对象(如有需要则通过sql获取),其它对象的属性通过主对象的函数获取。这样可以在有缓存的情况下速度快,且sql取出来的数据纯粹(无关联更新)可缓存。