5年老码农的代码规范,值得学习!
从事Java有5年了,但是写博客以及分享java知识是从去年才开始的,我想主要有以下两个原因吧!
1、由于债务负担,2018年我进了一家it公司打杂,所谓打杂就是curd操作,成为了一名curd程序员,这让我有很多空余时间。
2、自己必须更快的成长,公司学不到怎么办?那就自己学,学了那么多怎么才能加深影响呢?写博客!写博客会让你更加深入的了解每个知识点。
最后我发现,我感觉最难不是技术,而是规范!!!(当然,没遇到一个好的师傅带),每个项目的代码规范都不同,但是这很重要,有多重要就不用我多说了吧。如果你觉得无所谓,请忽略下面内容。
开始我就属于我看着这个代码挺好的,我就用这个,后来看到另一个代码还好,我又用这个,就这样,一会用这个一会用那个,始终没有一套自己的标准!!!(而且我是一个代码强迫者,当我看到这套代码好的时候,我居然可以把之前做好的功能全部重来一次!!!),那怎么办呢?
我开始上github,看star比较多的开源项目,突然我好像发现了新大陆,一切都柳暗花明,比如:mall、litemall、eladmin、ruoyi、davinci等许多优秀的项目,代码也都写得挺好的,最后我整理了一套自己认为比较好的代码规范。
该文只是分享我的代码规范,只供参考,但是你要相信一句话
!!!!规范>编码!!!!!!!!
应用分层(参考阿里规范)
• 开放接口层:可直接封装 Service 方法暴露成 RPC 接口;通过 Web 封装成 http 接口;进行网关安全控制、流量控制等。
• 终端显示层:各个端的模板渲染并执行显示的层。当前主要是 velocity 渲染,JS 渲染,JSP 渲染,移
动端展示等。
• Web 层:主要是对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理等。
• Service 层:相对具体的业务逻辑服务层。
• Manager 层:通用业务处理层,它有如下特征:
1) 对第三方平台封装的层,预处理返回结果及转化异常信息。
2) 对 Service 层通用能力的下沉,如缓存方案、中间件通用处理。
3) 与 DAO 层交互,对多个 DAO 的组合复用。
• DAO 层:数据访问层,与底层 MySQL、Oracle、Hbase 等进行数据交互。
• 外部接口或第三方平台:包括其它部门 RPC 开放接口,基础平台,其它公司的 HTTP 接口。
上述介绍了阿里规约中的应用分层,以及每层的作用是什么,既然每层我们知道了,但是每层如何开发呢?或者说如何编码呢?下面就是我的每一层编码规范
编码规范
首先终端显示层到web层,也就是HTTP请求:采用RESTful风格
也就是
/admin HTTP POST #新增admin
/admin/1 HTTP GET #获取id=1的admin
/admin/1 HTTP PUT #修改id=1的admin
/admin/1 HTTP DELETE #删除id=1的admin
web(controller):统一返回json格式,方法命名根据请求获取资源行为,比如:getRoleList,但我会保留几个基础命名:list,getById,update,delete;业务都扔到service层去,不要在web层做,只做简单验证就是了,这样的目的就是高内聚低耦合)
service:基本遵循阿里巴巴手册,但是业务除外
1) 获取单个对象的方法用 get 做前缀。
2) 获取多个对象的方法用 list 做前缀,复数形式结尾如:listObjects。
3) 获取统计值的方法用 count 做前缀。
4) 插入的方法用 save/insert 做前缀。
5) 删除的方法用 remove/delete 做前缀。
6) 修改的方法用 update 做前缀。
dao:同service层,但是完全遵循阿里巴巴手册,因为这一层没有业务
mysql:业务分块,一个块一个系统,比如oms(订单管理系统),然后再加业务名,比如订单,oms_order
POJO:DO/DTO/BO/VO 的统称。有些喜欢写一个大而全的实体类,什么地方都在用,而阿里巴巴给了规范是每层的实体都不一样,也就是说你调用下一层或者上一层都需要实体转换,以下是一个大神的解决方案。
你见过工作5年的程序员还在写curd吗?
目录结构
返回工具类
实体结构
相关推荐
rancho-web项目
https://github.com/rancho00/rancho-web
mall项目
https://github.com/macrozheng/mall
litemall项目
https://github.com/linlinjava/litemall
eladmin项目
https://github.com/elunez/eladmin
ruoyi项目
https://gitee.com/y_project/RuoYi-Vue
davinci项目
https://github.com/edp963/davinci
你的项目应该如何分层
https://github.com/javagrowing/JGrowing/blob/master/%E5%88%86%E6%9E%90%E8%AE%BE%E8%AE%A1/%E4%BD%A0%E7%9A%84%E9%A1%B9%E7%9B%AE%E5%BA%94%E8%AF%A5%E5%A6%82%E4%BD%95%E5%88%86%E5%B1%82.md
阿里巴巴Java开发手册(华山版)
https://github.com/alibaba/p3c/blob/master/%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4Java%E5%BC%80%E5%8F%91%E6%89%8B%E5%86%8C%EF%BC%88%E5%8D%8E%E5%B1%B1%E7%89%88%EF%BC%89.pdf
往期推荐
🔗
往期推荐
🔗
点击阅读原文,获得更多精彩内容