关于CRUD代码的思考

1.结果or异常

  1. 对于新增/修改,返回结果需不需要数据结果,还是直接返回true?
    这取决于业务系统操作的连续性,如果在一个前台页面有一系列完整的操作,返回数据更好.

  2. 对于无法执行的操作,返回操作失败异常还是false?
    最好是返回异常,利用Optional.orElseThrow()和全局异常处理,比如修改传入的ID是非法的.

2.数据安全权限

  1. 业务数据操作
    对于多租户系统而言,单一数据操作如果仅通过主键ID并不可靠,最好通过继承的方式将租户的ID都写入到具体的业务表,然后操作的时候增加该条件.

  2. 用户信息
    可以自定义一个用户上下文对象,方便取值.

3.数据校验放到controller还是service

都放是最可靠的,尤其是可能存在NPE的代码,因为service的method可能被多个地方调用.
controller中可使用Spring Validated完成校验.

4.分页查询与restful风格

对于restful风格的接口而言,可能需要get接口完成分页查询,对于条件不多的,可以用get和query param实现,后台分别用两个vo接收(pageVO/dataVO),对于条件较多的查询来说,get请求参数不够直观,可以使用post,仅将page信息放置于query param或 path param

5. 避免死代码

  1. 尽可能定义常量替代直接四处使用的值
  2. 利用占位符%s或{},复用这些常量
  3. 不确定/易变的常量配置化
  4. 避免使用+等直接操作字符串
  5. Spring/lang3/Guava等工具类使用,避免重复定义method

关于CRUD代码的思考

上一篇:leetcode1614. 括号的最大嵌套深度


下一篇:Git的使用