《Java工程师必读手册》——Java经验之谈系列——那些年,我们见过的Java服务端“乱象”(3)

简介: 《Java工程师必读手册》——Java经验之谈系列——那些年,我们见过的Java服务端“乱象”(3)

接上篇:https://developer.aliyun.com/article/1228261?spm=a2c6h.13148508.setting.27.6e864f0ezvytvj


三、 把持久层代码写在Service中

 

把持久层代码写在Service中,从功能上来看并没有什么问题,这也是很多人欣然接受的原因。

 

 

1. 引起以下主要问题

 

业务层和持久层混杂在一起,不符合SpringMVC服务端三层架构规范;

在业务逻辑中组装语句、主键等,增加了业务逻辑的复杂度;

在业务逻辑中直接使用第三方中间件,不便于第三方持久化中间件的替换;

同一对象的持久层代码分散在各个业务逻辑中,背离了面对对象的编程思想;

在写单元测试用例时,无法对持久层接口函数直接测试。

 

2. 把数据库代码写在Service中

 

这里以数据库持久化中间件Hibernate的直接查询为例。

 

现象描述

 

image.png 

 

 

建议方案

 

image.png 

 

 

 

关于插件

 

阿里的AliGenerator是一款基于MyBatis Generator改造的DAO层代码自动生成工具。利用AliGenerator生成的代码,在执行复杂查询的时候,需要在业务代码中组装查询条件,使业务代码显得特别臃肿。

 

image.png 

 

个人不喜欢用DAO层代码生成插件,更喜欢用原汁原味的MyBatis XML映射,主要原因如下:

 

会在项目中导入一些不符合规范的代码;

只需要进行一个简单查询,也需要导入一整套复杂代码;

进行复杂查询时,拼装条件的代码复杂且不直观,不如在XML中直接编写SQL语句;

变更表格后需要重新生成代码并进行覆盖,可能会不小心删除自定义函数。

 

当然,既然选择了使用DAO层代码生成插件,在享受便利的同时也应该接受插件的缺点。

 

 

3. 把Redis代码写在Service中

 

现象描述

 

image.png 


 

建议方案

 

image.png 

 

把一个Redis对象相关操作接口封装为一个DAO类,符合面对对象的编程思想,也符合SpringMVC服务端三层架构规范,更便于代码的管理和维护。


接下篇:https://developer.aliyun.com/article/1228259?groupCode=java

相关文章
|
1月前
|
人工智能 自然语言处理 Java
Spring AI,Spring团队开发的新组件,Java工程师快来一起体验吧
文章介绍了Spring AI,这是Spring团队开发的新组件,旨在为Java开发者提供易于集成的人工智能API,包括机器学习、自然语言处理和图像识别等功能,并通过实际代码示例展示了如何快速集成和使用这些AI技术。
Spring AI,Spring团队开发的新组件,Java工程师快来一起体验吧
|
3月前
|
Java 开发者
【技术成长日记】Java 线程的自我修养:从新手到大师的生命周期修炼手册!
【6月更文挑战第19天】Java线程之旅,从新手到大师的进阶之路:始于创建线程的懵懂,理解就绪与运行状态的成长,克服同步难题的进阶,至洞悉生命周期的精通。通过实例,展示线程的创建、运行与同步,展现技能的不断提升与升华。
31 2
|
2月前
|
Java
图解java工程师学习路线
图解java工程师学习路线
174 0
|
3月前
|
小程序 JavaScript 安全
Java全套同城服务家政上门系统源码(APP用户端+APP服务端+PC管理端)
家政上门预约系统:该系统综合运用springboot、java1.8、vue移动支付、微信授权登录等技术,由用户小程序、站长小程序、服务员小程序和管理系统平台组成,实现用户预约、系统派单、自动结算、服务跟踪、一键分享等功能,打造线上家政服务商城。
184 7
|
3月前
|
Java 数据安全/隐私保护
Java基础手册二(类和对象 对象创建和使用 面向对象封装性 构造方法与参数传递 this关键字 static关键字 继承 多态 方法覆盖 final关键字 访问控制权限修饰符)
Java基础手册二(类和对象 对象创建和使用 面向对象封装性 构造方法与参数传递 this关键字 static关键字 继承 多态 方法覆盖 final关键字 访问控制权限修饰符)
28 0
|
3月前
|
存储 Java
Java基础手册(标识符 关键字 字面值 变量 数据类型 字符编码 运算符 控制语句 方法及方法重载和递归 面向对象与面向过程)
Java基础手册(标识符 关键字 字面值 变量 数据类型 字符编码 运算符 控制语句 方法及方法重载和递归 面向对象与面向过程)
30 0
|
3月前
|
存储 Java 编译器
技术经验解读:一文带你搞懂java中的变量的定义是什么意思
技术经验解读:一文带你搞懂java中的变量的定义是什么意思
25 0
|
3月前
|
存储 Java 测试技术
技术经验解读:【Java】事件驱动模型和观察者模式
技术经验解读:【Java】事件驱动模型和观察者模式
|
3月前
|
存储 自然语言处理 Java
Java IO流完全手册:字节流和字符流的常见应用场景分析!
【6月更文挑战第26天】Java IO流涵盖字节流和字符流,字节流用于二进制文件读写及网络通信,如图片和音频处理;字符流适用于文本文件操作,支持多语言编码,确保文本正确性。在处理数据时,根据内容类型选择合适的流至关重要。
46 0
|
3月前
|
Java
java使用多线程编写服务端与客户端文件上传程序
java使用多线程编写服务端与客户端文件上传程序