谈一谈MVC与三层架构
原文链接:这里。
1.三层架构
什么是三层架构呢?
这里指的是UI(表现层)、BLL(业务逻辑层)、DAL(数据访问层)。
UI(表现层):就是展现给用户的页面,用于接收用户的数据和显示处理后用户的数据。
BLL(业务逻辑层):表现层和数据层的桥梁,实现三层之间的数据连接和指令传达,可以对接收数据进行逻辑处理,并将结果返回到表现层。
DAL(数据访问层):主要与数据库打交道,实现对数据的增删改查。将数据库中的信息交给业务层,将业务层处理完的数据交给数据库保存。
三者之间的关系可以用下面这个图表示。
通俗一点的例子是:有一天你去餐馆吃饭,你点了一个鱼香肉丝,服务员拿着你的菜单去后厨交给厨师,厨师让厨工去冰箱里找出鱼香肉丝的原料,厨工找到后把原料交给厨师,厨师进行加工后交给服务员,服务员交给顾客。
在这个例子中,服务员是表现层,它把用户的请求(点菜)交给厨师。厨师担任的是业务逻辑层,负责接收表现层的请求,拿着这个请求(鱼香肉丝的菜单)交个厨工,厨工是数据访问层,拿着菜单去冰箱里找原料。找到后交个厨师,厨师做完菜后交个服务员,服务员拿着菜(数据)交个顾客。
为什么使用三层架构?
在上面的例子中,三个人各司其职,服务员只负责接收和处理客人的需求(点菜和上菜),厨师只负责做菜,厨工只负责从冰箱里找原材料。那么为什么是三层架构而不是两层或者四层呢?
官方的说法是“解耦”,通俗一点继续拿上面的例子用。在上面的例子中,如果服务员出了问题(上错菜,服务态度不好),那么把服务员换掉即可。如果顾客反应菜的味道不对,厨师的问题,换掉厨师。如果说菜里该有的原料没有(炒肉片里没有肉)是厨工的问题,没有找对原料,换掉厨工即可。也就是说这三个人任何一个人出了问题都不会影响到其他人继续操作。
两层和四层结构行不行呢?答案是可以的,但是也有相应的问题,层数越少,可维护性越低,因为这意味着你其中一个出了问题可能要换掉整体。层数越多代码量和工作量越多。
简单总结一下就是:
三层架构就是为了符合“高内聚,低耦合”思想,把各个功能模块划分为表示层(UI)、业务逻辑层(BLL)和数据访问层(DAL)三层架构,各层之间采用接口相互访问,并通过对象模型的实体类(Model)作为数据传递的载体,不同的对象模型的实体类一般对应于数据库的不同表,实体类的属性与数据库表的字段名一致。
2.mvc设计模式
什么是mvc设计模式?
MVC模式是GUI界面开发的指导模式。它基于表现层分离的思想把程序分为三大部分:Model-View-Controller,呈三角形结构。
View(视图):负责页面的显示(css/js等);与用户的交互(处理点击和提交表单等操作)。
Controller(控制器):负责将视图和模型连接起来,主要功能是接收来自视图的请求,把请求交个模型处理;模型处理完毕后,再通过控制器,返回给视图。
Model(模型):负责从Controller接收请求,然后处理请求返回给Controller。
3.mvc与三层架构的关系
可以用下面这幅图来表示:
4.SpringMVC
要搞明白SpringMVC,首先要明白几个组件。
(1)DisPatcherServlet前端控制器。核心组件,用户在浏览器输入url, 发起请求,首先会到达DisPatcherServlet,由它来调用其他组件完成配合工作的。
(2)HandelMapping 处理映射器,记录url与处理器的映射,方式有注解,xml配置等。
(3)Handler 处理器,后端控制器。通俗一点讲就是Controller层所写的业务代码。对用户的请求进行处理。
(4)HandlerAdapter 处理器适配器,调用具体的方法对用户发来的请求来进行处理。当handlerMapping获取到执行请求的controller时,DispatcherServlte会根据controller对应的controller类型来调用相应的HandlerAdapter来进行处理。
(5)ViewResolver 视图解析器, ViewResovler负责解析view视图,并进行渲染(数据填充),将处理结果通过页面展示给用户看。
(6)View 视图 ,是一个接口,实现类支持不同的View类型。