代码分层设计,三层架构Controller、Service和Dao的区别与联系

1 三层架构概览

在这里插入图片描述

如果去饭店吃饭,不可能找厨师点菜吧?
小工负责食材存取,洗菜切肉;厨师负责烹饪;跑堂负责接待食客并与后厨沟通。这就是精典的分层体现。
如果一个厨师既负责跑堂,又负责烹饪。那这个饭店的管理一定非常混乱吧。

  • 小工就是DAO,从食材库里(数据源)取出食材(原始数据),进行简单处理(数据对象化)。
  • 厨师就是Service,找到小工(DAO),获取各种半成品(对象化数据),加工成顾客需要的菜肴(最终数据)。
  • 跑堂就是Controller,负责接单(提交数据)上菜(响应数据),是顾客与后厨间的媒介(提供用户与后台程序的接口)。

把不变的留住,然后改变需要变的部分。而且你会发现很天然的,在维护接口逻辑的代码,维护业务逻辑的代码,维护存储和实体转换的代码天然就是很适合拆分的。

4层调用关系

  • 表示层(View\Web,前端页面展示) 调用 控制层(Controller)。
  • 控制层(Controller)调用业务层(Service)。
  • 业务层(Service)调用数据访问层(Dao)

Service 写api 的,Controller写逻辑的业务接口,Dao 跟 mapper 一样的 处理数据的。

2 控制层 Controller

  • 维护接口逻辑的代码
    负责请求转发,接受页面过来的参数,传给Service处理,接到返回值,再传给页面。即用于接口暴露。

  • 可能发生的接口变化
    接口形式会增加,从支持http api变层支持某种rpc,支持通过websocket发起上行请求。
    接口的访问控制可能会变。同样的接口,普通用户访问,后台管理员,合作伙伴访问,给的参数和管控都不一样。
    接口需要引入其他业务的逻辑,
    业务逻辑会变,引入不同的规则和用来判断规则的数据。

3 服务层 Service

  • 维护业务逻辑的代码
    粗略的理解就是对一个或多个DAO进行的再次封装,封装成一个服务。即sevice层用于逻辑处理,sevice层专注业务逻辑,对于其中需要的数据库操作,都通过Dao去实现。

  • 可能发生的业务变化
    业务逻辑可能会被复用。或者挪到上游或者下游。

    扫描二维码关注公众号,回复: 15049115 查看本文章

4 数据访问层 DAO

  • 维护存储和实体转换的代码
    Dao层主要做数据持久层的工作, 负责与数据库进行联络的一些任务都封装在此。
    属于一种比较底层,比较基础的操作,具体到对于某个表、某个实体的增删改查,不涉及业务逻辑,只是达到按某个条件获得指定数据的要求。

  • 什么是数据持久化
    将内存中的数据模型转换为存储模型。JDBC就是一种持久化机制。文件IO也是一种持久化机制。
    持久化是将程序数据在持久状态和瞬时状态间转换的机制。通俗的讲,就是瞬时数据(比如内存中的数据,是不能永久保存的)持久化为持久数据(比如持久化至数据库中,能够长久保存)。

  • 什么是数据序列化
    把对象转化为可传输的字节序列过程称为序列化。把字节序列还原为对象的过程称为反序列化。序列化最终的目的是为了对象可以跨平台存储,和进行网络传输。
    序列化是将对象的状态信息转换为可以存储或传输的形式的过程。 序列化可以用于辅助数据持久化

5 三层架构与MVC的区别和联系

MVC的dao层、service层到底怎么写?

  • 首先解释面上意思,service是业务层,dao是数据访问层。
  • 这个问题我曾经也有过,记得以前刚学编程的时候,都是在service里直接调用dao,service里面就new一个dao类对象,调用,其他有意义的事没做,也不明白有这个有什么用,参加工作久了以后就会知道,业务才是工作中的重中之重。
    我们都知道,标准主流现在的编程方式都是采用MVC综合设计模式,MVC本身不属于设计模式的一种,它描述的是一种结构,最终目的达到解耦,解耦说的意思是你更改某一层代码,不会影响我其他层代码,如果你会像spring这样的框架,你会了解面向接口编程,表示层调用控制层,控制层调用业务层,业务层调用数据访问层。 初期也许都是new对象去调用下一层,比如你在业务层new一个DAO类的对象,调用DAO类方法访问数据库,这样写是不对的,因为在业务层中是不应该含有具体对象,最多只能有引用,如果有具体对象存在,就耦合了。当那个对象不存在,我还要修改业务的代码,这不符合逻辑。好比主板上内存坏了,我换内存,没必要连主板一起换。我不用知道内存是哪家生产,不用知道多大容量,只要是内存都可以插上这个接口使用。这就是MVC的意义。
  • 接下来说你感觉service的意义,其实因为你现在做东西分层次不是那么严格,在一个你们做东西业务本身也少,举个最简单的例子,你做一个分页的功能,数据1000条,你20条在一个页,你可以把这个功能写成工具类封装起来,然后在业务层里调用这个封装的方法,这才是业务里真正干得事,只要没访问数据库的,都要在业务里写

什么是MVC架构?
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

  • M 即Model(模型层),主要负责处理业务逻辑以及数据库的交互,承载数据
    数据承载Bean(实体类)
    业务处理Bean(Service或Dao对象)
  • V 即View(视图层),主要负责显示数据和提交数据
    可以是表单请求、超链接请求、AJAX请求登。
  • C 即Controller(控制层),主要是用作辅助捕获请求并控制请求转发
    将用户的请求转发给Model进行处理

采用三层架构或MVC搭建程序最主要的区别

  • MVC没有把业务的逻辑访问看成两个层

在这里插入图片描述

参考资料:
https://fuy7.gitee.io/fuy7blog/2020/03/20/MVC%E5%88%86%E6%9E%90/

猜你喜欢

转载自blog.csdn.net/qq_33957603/article/details/124623134