专业人是怎么对Java项目代码分层的

代码分层,对于任何一个Java开发来说应该都不陌生。一个好的层次划分不仅可以能使代码结构更加清楚,还可以使项目分工更加明确,可读性大大提升,更加有利于后期的维护和升级。

从另外一个角度来看,好的代码分层架构,应该是可以很好的匹配上单一职责原则的。这样就可以降低层与层之间的依赖,还能最大程度的复用各层的逻辑。本文就来介绍下Java 项目的代码到底应该如何分层。

1.背景

说起应用分层,大部分人都会认为这个不是很简单嘛 就controller,service, mapper三层。看起来简单,很多人其实并没有把他们职责划分开,在很多代码中,controller做的逻辑比service还多,service往往当成透传了,这其实是很多人开发代码都没有注意到的地方,反正功能也能用,至于放哪无所谓呗。这样往往造成后面代码无法复用,层级关系混乱,对后续代码的维护非常麻烦。

的确在这些人眼中分层只是一个形式,前辈们的代码这么写的,其他项目代码这么写的,那么我也这么跟着写。但是在真正的团队开发中每个人的习惯都不同,写出来的代码必然带着自己的标签,有的人习惯controller写大量的业务逻辑,有的人习惯在service中之间调用远程服务,这样就导致了每个人的开发代码风格完全不同,后续其他人修改的时候,一看,我靠这个人写的代码和我平常的习惯完全不同,修改的时候到底是按着自己以前的习惯改,还是跟着前辈们走,这又是个艰难的选择,选择一旦有偏差,你的后辈又维护你的代码的时候,恐怕就要骂人了。

所以一个好的应用分层需要具备以下几点:

方便后续代码进行维护扩展。

分层的效果需要让整个团队都接受

各个层职责边界清晰

2.如何进行分层

以阿里巴巴的编码规范约束分层为例:

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

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

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

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

Manager 层:通用业务处理层,它有如下特征:

1. 对第三方平台封装的层,预处理返回结果及转化异常信息;

2. 对Service层通用能力的下沉,如缓存方案、中间件通用处理;

3. 与DAO层交互,对多个DAO的组合复用。DAO 层:数据访问层,与底层 MySQL、Oracle、Hbase 进行数据交互。

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

文章篇幅有限,推荐大家看个系统性的java教程。希望可以帮到大家~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java项目分层可以采用以下三层架构: 1. 表现层:主要负责与用户交互,接收用户的请求,将请求传递给业务层,最终将结果呈现给用户。常见的表现层框架有Spring MVC、Struts2等。 2. 业务层:主要负责处理业务逻辑,包括数据的处理、计算、验证、转换等。业务层通常通过调用数据访问层获取数据,并将处理结果返回给表现层。业务层也可以通过调用其他服务来完业务逻辑。常见的业务层框架有Spring、MyBatis等。 3. 数据访问层:主要负责与数据库交互,包括数据的增删改查、事务管理等。数据访问层通常使用ORM框架来简化数据访问操作,如Hibernate、MyBatis等。 在具体实现时,可以按照以下步骤进行: 1. 创建三个不同的包分别用于存放表现层、业务层、数据访问层的代码。 2. 在表现层中编写控制器类,用于接收用户请求并将请求传递给业务层。 3. 在业务层中编写服务类,用于处理业务逻辑,调用数据访问层获取数据,并将处理结果返回给表现层。 4. 在数据访问层中编写数据访问类,用于与数据库进行交互,包括数据的增删改查、事务管理等。 5. 在配置文件中进行相关配置,如Spring配置文件、MyBatis配置文件等。 6. 在项目中引入相关框架和依赖,如Spring框架、MyBatis框架等。 通过以上步骤,可以将Java项目分层,实现代码的高内聚、低耦合,提高代码的可读性、可维护性和可扩展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值