MVC
一、MVC模型
MVC模型是(model模型 view视图 controller控制器)是一种软件设计的框架模式,它采用model-view-controller的方法把业务逻辑,数据与视图显示分离,把众多的业务逻辑集合在一个部件里。当然这样并不能让我们理解它,简单的说,就是一种把数据模型,视图显示与人机交互三者分离开的一种编程方式。
1.mvc三层解释
- 1、Model(模型) - 模型代表一个存取数据的对象。它带有逻辑,在数据变化时更新控制器。
- 2、View(视图) - 视图代表模型包含的数据的可视化。
- 3、Controller(控制器) - 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。使视图与模型分离开。
2.为什么要引入MVC模型呢?
- 可以使同一个程序使用不同的表现形式,如果控制器反馈给模型的数据发生了变化,那么模型将及时通知有关的视图,视图会对应的刷新自己所展现的内容其实控制器的功能类似于一个中转站,会决定调用那个模型去处理用户请求以及调用哪个视图去呈现给用户
- 因为模型是独立于视图的,所以模型可复用,模型可以独立的移植到别的地方继续使用
- 前后端的代码分离,使项目开发的分工更加明确,程序的测试更加简便,提高开发效率
3.mvc的宗旨
- MVC要实现的目标是将软件用户界面和业务逻辑分离以使代码可扩展性、可复用性、可维护性、灵活性加强。
- View层是界面,Model层是业务逻辑,Controller层用来调度View层和Model层,将用户界面和业务逻辑合理的组织在一起,起粘合剂的效果。所以Controller中的内容能少则少,这样才能提供最大的灵活性。
二、三层架构
三层架构就是为了符合“高内聚,低耦合”思想,把各个功能模块划分为表示层(UI,User Interface layer)、业务逻辑层(BLL,Business Logic Layer)和 数据访问层(DAL,Data access layer)三层架构,各层之间采用接口相互访问,并通过对象模型的实体类(Model)作为数据传递的载体,不同的对象模型的实体类一般对应于数据库的不同表,实体类的属性与数据库表的字段名一致。
(一)三层架构
1.各模块功能划分
- 表示层:主要对用户的请求接受,以及数据的返回,为客户端提供应用程序的访问。
- 业务逻辑层:主要负责对数据层的操作。也就是说把一些数据层的操作进行组合。
- 数据访问层:主要看数据层里面有没有包含逻辑处理,实际上它的各个函数主要完成各个对数据文件的操作。而不必管其他操作。主要实现对数据的增、删、改、查。
2.实例
- 服务员:负责接待客人和传菜
- 主厨:后厨的头头,后处里主厨说了算。可以理解为架构师,负责后厨和服务员的对接
- 小厨:每个小厨有自己特定的工作,各司其职
(二)Entity(实体层)
1.三层架构中各功能模块如何联系?
这里就要提到Entity(实体层):它不属于三层中的任何一层,但是它是必不可少的一层。对于大量的数据来说,用变量做参数有些复杂,因为参数量太多,容易搞混。
比如:我要把员工信息传递到下层,信息包括:员工号、姓名、年龄、性别、工资.......用变量做参数的话,那么我们的方法中的参数就会很多,极有可能在使用时,将参数匹配搞混。这时候,如果用实体做参数,就会很方便,不用考虑参数匹配的问题,用到实体中哪个属性拿来直接用就可以,很方便。这样做也提高了效率。
2.Entity在三层架构中的作用
- 实现面向对象思想中的"封装";
- 贯穿于三层,在三层之间传递数据;(注:确切的说实体层贯穿于三层之间,来连接三层)
- 每一层(UI—>BLL—>DAL)之间的数据传递(单向)是靠变量或实体作为参数来传递的,这样就构造了三层之间的联系,完成了功能的实现。
3.三层及实体层之间的依赖关系:
(三)三层与两层的区别
1.两层:
(当任何一个地方发生变化时,都需要重新开发整个系统。"多层"放在一层,分工不明确耦合度高——难以适应需求变化,可维护性低、可扩展性低)
2.三层:
(发生在哪一层的变化,只需更改该层,不需要更改整个系统。层次清晰,分工明确,每层之间耦合度低——提高了效率,适应需求变化,可维护性高,可扩展性高)
(四)三层架构分析
1.为什么使用三层架构
三层架构区分层次的目的是为了 “解耦”。开发人员分工更明确,将精力更专注于应用系统核心业务逻辑的分析、设计和开发,加快项目的进度,提高了开发效率,有利于项目的更新和维护工作。
同样拿上面饭店的例子来讲:
服务员(UI层)请假——另找服务员;
主厨(BLL层)辞职——招聘另一个主厨;
小厨(DAL)辞职——招聘另一个小厨;
【顾客反映】
你们店服务态度不好——服务员的问题。开除服务员;
你们店菜里有虫子——主厨的问题。换厨师;
任何一层发生变化都不会影响到另外一层。
2.三层架构的优势
- 结构清晰、耦合度低
- 可维护性高,可扩展性高
- 利于开发任务同步进行, 容易适应需求变化
3.三层架构的劣势
- 降低了系统的性能。这是不言而喻的。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成。
- 有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码
- 增加了代码量,增加了工作量
(五)MVC与三层架构的区别
三、SpringMVC三层结构
Java SpringMVC的工程结构一般来说分为三层,自下而上是Modle层(模型,数据访问层)、Cotroller层(控制,逻辑控制层)、View层(视图,页面显示层),其中Modle层分为两层:dao层、service层,MVC架构分层的主要作用是解耦。
采用分层架构的好处,普遍接受的是系统分层有利于系统的维护,系统的扩展。就是增强系统的可维护性和可扩展性。
1.dao层
- DAO层叫数据访问层,全称为data access object
- dao层主要做数据持久层的工作
- 负责与数据库进行联络的一些任务都封装在此
- Dao的作用是封装对数据库的访问:增删改查,不涉及业务逻辑
- 在Dao层定义的一些方法,在Service层并没有被使用的情况:Dao层的操作经过抽象后基本都是通用的,在Dao层完成相关方法的定义,有利于支持后期Service层的扩展。
2.service层
- service层主要负责业务模块的应用逻辑应用设计
- service层的业务层具体要调用已经定义的dao层接口,封装service层业务逻辑有利于通用的业务逻辑的独立性和重复利用性。程序显得非常简洁。
3.controller层
- controller层负责具体的业务模块流程的控制。
- 在此层要调用service层的接口来控制业务流程。
4.view层
- view层与控制层结合比较紧密,需要二者结合起来协同开发。view层主要负责前台jsp页面的显示。
面向接口编程。表示层调用控制层,控制层调用业务层,业务层调用数据访问层。
- Dao层设计与设计的数据库表,和实现类(对应的Entity或者JavaBean)一一对应。
- Service层是建立在DAO层之上的,建立了DAO层后才可以建立Service层,而Service层又是Controller层之下的,因而 Service层应该既调用DAO层的接口,又要提供接口给Controller层的类来进行调用,它刚好处于一个中间层的位置。
- View层与Controller层结合紧密,需要二者结合协同开发。Service层、Dao层和其他层次耦合很低,完全可以单独开发。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了