分包
在说单个项目的代码分层之前,先说一下代码的分包。
大家公司现在面临着比较尴尬的问题,一方面新的项目部再是只有一个代码包,希望走微服务的方式,把一个项目拆成多个工程,分别迭代开发和部署;另一方面,很多基础的基础还不是很完善,比如容器、容器管理工具、持续集成,要么是没有,要么是难以用在生产环境中。
所以大家项目只拆分出来五六个工程,包括定式服务、接口服务、前端页面等;除了前端页面这个工程要依赖接口服务之外,其余几个工程彼此可以单独部署,很多功能是通过MQ解耦。
分层
单个工程中,分包都是一样的,也和主流的代码分层差不多:
Model层:就是普通的Jave Bean,数据的实体对象,和数据库列名保持一致;
DAO层:Data Access Object,数据访问对象,大家用的是MyBatis,在方法的注解中写SQL语句;
Service层:业务逻辑层,这里可能调用其他的Service或DAO;
Controller层:请求处理层,包括入参回参的类型转换、入参验证等功能在这里完成;
Domain层:大家把回参单独做了一层,没有和Model层混在一起;就算一个接口要查询一个单表,查询结果也要把Model转成Domain;大家在Domain这一层做了很多字段的标准化,保持见名知意;
剩下的就是Util、Contants、Config等等。
做到现在的阶段,也遇到了一些问题,也在想办法解决:
一些可以通用的类,在几个包中都存在,有的时候修改起来要修改好几个工程,挺麻烦的,准备把这些通用的东西提出来放在单独的一个工程中;
接口现在放在一个工程中,偶认为是有些不合理的;接口应该可以分成原子服务和组合服务,这里至少要分成两层,原子服务稳定,改动的频率很低;组合服务应该是快速迭代的,会根据需求不断地修改和增加。但是苦于没有很多基础设施,纯人工的话又很难支持。