一 MVC定义

MVC:Model+VIEW+Controller(数据模型+视图+控制器)

M:数据模型,是包含数据的对象。

V:指的是视图页面,为用户提供的使用界面,与用户直接进行交互。包含JSP、freeMarker、Velocity、Thymeleaf、Tile等。

C:控制器。

 

二 三层架构定义

三层架构:Presentation tier+Application tier+Data tier(展现层+应用层+数据访问层)

或者叫:视图层View、服务层Service、持久层Dao,分别完成不同的功能。

View层:用于接收用户提交请求的代码在这里编写。

Service层:系统的业务逻辑主要在这里编写。

Dao层:直接操作数据库的代码在这里编写。

为了更好的降低各层间的耦合度,在三层架构程序设计中,采用面向接口的编程。即上层对下层的调用,是通过接口实现的。而下层对上层的真正服务提供者,是下层接口的实现类。服务标准(接口)是相同的,服务提供者(实现类)可以更换。这就实现了层间的耦合。

 

三 两者的区别和联系

三层是三层,MVC是MVC,它们毫无关系的。

三层是从整个应用程序架构的角度来分的三层(如果程序需要,还可以分多层)。

三层是为了解决整个应用程序中各个业务操作过程中不同阶段的代码封装的问题,为了使程序员更加专注的处理某阶段的业务逻辑。比如将数据库操作代码封装到一层中,提供一些方法根据参数直接返回用户需要的相应数据,这样在处理具体的业务逻辑的时候,就不用关心数据的存储问题了。

MVC是在应用程序(BS结构)的视图层划分出来的不同功能的几个模块。

MVC主要是为了解决应用程序用户界面的样式替换问题,把展示数据的 HTML 页面尽可能的和业务代码分离。MVC把纯净的界面展示逻辑(用户界面)独立到一些文件中(Views),把一些和用户交互的程序逻辑(Controller)单独放在一些文件中,在 Views 和 Controller 中传递数据使用一些专门封装数据的实体对象,这些对象,统称为Models。

之所以说MVC和三层毫无关系,是因为它们二者使用范围不同:三层可以应用于任何语言、任何技术的应用程序;而MVC只是为了解决BS应用程序视图层各部分的耦合关系。它们互不冲突,可以同时存在,也可根据情况使用其中一种。

 

四 一直存在的错误理解——三层架构就是MVC!

起初老师总说三层MVC,MVC三层架构……

所以开始的时候脑子就一个概念:三层就是MVC,MVC就是三层架构。而且想想也合理啊,都是“三”。MVC是三个字母,三层架构也是“三”,理所应当的就对应上了。然后就这么一直错下去。

 

五 新的观点——三层架构绝不是MVC

后来学习了J2EE之后发现老师说的好像不对,MVC和三层架构不是一个东西。三层架构是界面层(UI)业务逻辑层(BLL)和数据访问层(DAL)构成的,而MVC是模型层(M)界面层(View)和控制层(Controller)构成的,而且他们之间也不对应。

如果硬要给他们对应的话,那么三层架构中的UI对应MVC中的view(jsp),都是用于显示以便获取界面的数据;三层架构中的BLL层和DAL层对应MVC中的Model(javabean)层都是用于处理上层传递来的数据以及从数据库获取的数据的;MVC中的Controller(Servlet)最多算是三层架构中的UI的一部分,也就我们常说的是Servlet。

见下图的对应关系:

三层架构 中间层有哪些 三层架构之间的关系_三层架构 中间层有哪些

 

六 Spring MVC和三层关系

Spring MVC只存在于三层架构的展现层,见下图。

三层架构 中间层有哪些 三层架构之间的关系_Spring MVC_02