mvc模式如何分层

前言

在做一个小型的管理系统的时候,有同学说他的功能都能实现,但是就是代码比较凌乱,时间久了就不知道各个包放的啥,有什么功能。

我觉得不仅要有良好的写代码习惯,也要有好的分层意识。不能因为是初学者就忽视这个问题,因为好的习惯能给你带很多方便,也为未来做项目打下基础。习惯不好以后改过来挺麻烦的。

因此最近看了一些大牛的文章,做了一些整理:

首先说一下我们初学者学的MVC设计模式

通过这个模式就会更好的理解最新的结构分层思想

优秀代码都是如何分层的呢?

MVC模式

阿里的编码规范中约束的分层

一个好的分层,应该具备以下特点:

  • 方便后续代码进行维护扩展
  • 分层效果需要让整个团队接受,要始终明白未来的项目不是你一个人完成的。在一开始我觉得我们就应该有这样的思想准备。
  • 各层职责边界清晰

优秀代码都是如何分层的呢?

开放接口层:可直接封装 Service 方法暴露成 RPC 接口;通过 Web 封装成 http 接口;进行 网关安全控制、流量控制等。

终端显示层:各个端的模板渲染并执行显示的层。当前主要是 velocity 渲染,JS 渲染, JSP 渲染,移动端展示等。

Web 层:主要是对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理等。

Service 层:相对具体的业务逻辑服务层。

Manager 层:通用业务处理层,它有如下特征:1. 对第三方平台封装的层,预处理返回结果及转化异常信息;2. 对Service层通用能力的下沉,如缓存方案、中间件通用处理;3. 与DAO层交互,对多个DAO的组合复用。

DAO 层:数据访问层,与底层 MySQL、Oracle、Hbase 进行数据交互。

阿里巴巴规约中的分层比较清晰简单明了,但是描述得还是过于简单了,以及service层和manager层有很多同学还是有点分不清楚之间的关系,就导致了很多项目中根本没有Manager层的存在。


优化分层

Mannager:可复用逻辑层。这里的Mannager可以是单个服务的,比如我们的cache,mq等等,当然也可以是复合的,当你需要调用多个Mannager的时候,这个可以合为一个Mannager,比如逻辑上的连表查询等。如果是httpMannager或rpcMannager需要在这一层做一些数据转换

DAO:数据库访问层。主要负责“操作数据库的某张表,映射到某个java对象”,dao应该只允许自己的Service访问,其他Service要访问我的数据必须通过对应的Service

您可能还会对下面的文章感兴趣: