二、应用分层
- 【强制】每个微服务自身就是一个完整的Web应用,可以独立开发部署。采用常见的三层体系结构Web层、Service层、数据持久层。依下图箭头所示,自上而下产生依赖关系,下层不允许依赖上层。
- 【强制】Web 层:主要是对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理等。
- 【参考】Service 层:相对具体的业务逻辑服务层。
- 【参考】Manager 层:通用业务处理层,它有如下特征:
1) 对第三方平台封装的层,预处理返回结果及转化异常信息;
2) 对Service层通用能力的下沉,如缓存方案、中间件通用处理;
3) 与DAO层交互,对DAO的业务通用能力的封装。
2.【强制】Repostory 层:数据访问层,与底层 MySQL、Oracle、Hbase 进行数据交互。
3.【参考】 (分层异常处理规约)在 DAO 层,产生的异常类型有很多,无法用细粒度异常进行 catch,使用 catch(Exception e)方式,并 throw new DAOException(e),不需要打印日志, 因为日志在 Manager/Service 层一定需要捕获并打到日志文件中去,如果同台服务器再打日 志,浪费性能和存储。在 Service 层出现异常时,必须记录日志信息到磁盘,尽可能带上参数 信息,相当于保护案发现场。如果 Manager 层与 Service 同机部署,日志方式与 DAO 层处理 一致,如果是单独部署,则采用与 Service 一致的处理方式。Web 层绝不应该继续往上抛异常,因为已经处于顶层,无继续处理异常的方式,如果意识到这个异常将导致页面无法正常渲染,那么就应该直接跳转到友好错误页面,尽量加上友好的错误提示信息。开放接口层要将异常处 理成错误码和错误信息方式返回。7
4.【参考】分层领域模型规约:
Entity(Domain Object):与数据库表结构一一对应,通过 Repository 层向上传输数据源对象。
DTO(Data Transfer Object):数据传输对象,Service 和 Manager 向外传输的对象。
VM(View Model):显示层对象,通常是 Web 向前端传输的对象。