前言
我们在进行前后端交互的时候,会分为**数据访问,业务逻辑,接受请求并响应数据三个操作**,这三部分其实是可以拆分的,让他们解耦,否则代码复用性差并且不易维护,所以诞生了三层架构——**1.Dao(数据访问层/持久层)、2.Service(业务逻辑层)、3.Controller(控制层)**
首先我们可以看看,普通的交互代码:
各部分操作全部糅合在一个类中, 我选中的三个框其实都可以拆分开来
1.Dao(数据访问层/持久层)
负责数据访问操作,包括增删改查
![](https://img-blog.csdnimg.cn/bcb3280e971f48378838dbd6fef9c2fd.png)
我们一般用**接口**来实现,接口在这有以下好处:
在传统的Java开发中,DAO(Data Access Object)层通常用于封装对数据源(如数据库、文件系统等)的访问操作。使用接口定义DAO层的契约可以带来以下好处:
- 抽象和规范:接口定义了DAO层的契约,规定了应该提供哪些数据访问方法和操作。这样可以使代码更加抽象、可扩展和可维护。
- 解耦和可替换性:通过面向接口编程,DAO层的实现类与上层业务逻辑层之间可以实现解耦。业务逻辑层只依赖于DAO接口而不关心具体的实现类,这使得在需要更换底层数据源或更换数据访问方式时更加方便。
- 可测试性:接口可以提供更好的可测试性。通过使用接口,可以轻松地创建模拟对象或测试替身来进行DAO层的单元测试,而不需要依赖于真实的数据源。
- 面向切面编程:通过接口,可以更容易地将事务管理、异常处理等横切关注点应用到DAO层中,提供更好的代码结构和可维护性。
比如我这里就是**解析XML文件,将XML内部数据转化为一个集合并返回**。
2.Service(业务逻辑层)
** 处理具体的业务逻辑,同样也采用接口的形式,Service层可以通过获取Dao层的数据,对数据内部进行处理,然后再返回,接下来给Controller调用**
![](https://img-blog.csdnimg.cn/7a76a5e311e740cf8960cc0cff4acb2d.png)
比如我这里就是简单对性别gender和job这连个属性进行了修改 ,最后返回集合
3.Controller(控制层)
**接收前端发送的请求,对请求进行处理并响应数据**
![](https://img-blog.csdnimg.cn/b648fe76c4e6449f957ee4365cfe7906.png)
这里的Result是 SpringBoot中用到的统一格式的响应对象Result,
属性有1**.响应状态Code2.提示信息msg** 3**.响应的数据data**
![](https://img-blog.csdnimg.cn/3c298d81280341c89138a38c7b1b5925.png)
总结:
就如同上头的图片所示,我们在Controller中接受请求 ,调用Service进行逻辑处理,而Service中要调用Dao中的方法获取解析得到的数据,**一层一层递进,分工明确,程序复用性大大提高。**
** ** 在之后,可以继续融合Spring中IOC&DI技术,把Service和Dao中的类交给IOC管理(在类上加@Component注解),然后Controller中要调用Service对象的时候加入**@AutoWired自动装配,依赖注入,同理Service调用Dao对象的时候也加入@AutoWired,IOC会将给类型的bean对象赋值给你使用**,这样就不用我们手动创建对象了。
版权归原作者 稳健才是放肆 所有, 如有侵权,请联系我们删除。