MVC模式与三层架构

在开头我要感谢简述的一位作者,他的文章终于描述清楚了MVC和三层架构的区别

https://www.jianshu.com/p/83ec7b6c88b5

刚接触这两个概念,很有可能容易混淆(你如果不混淆那我只能说你比我强太多了~),误以为是一个东西的两种叫法。但深入了解后会发现,二者的构建大有不同。所以,“混淆”未必就是一件坏事,当你从“混淆”中走出来时,往往会对二者有一个比较深刻的认知。

 

一张图让我们把这两个看的清清楚楚

MVC模式与三层架构

一、传统设计(现在几乎不再使用):

Jsp + javaBean,

JavaBean用来对应数据库中的表,jsp负责显示界面、接受请求、处理业务、访问数据库。

弊端: 业务多时,导致jsp页面容易混乱,开发效率低

二、MVC

简介

MVC 是 Model-View-Controller 的简称,即模型-视图-控制器。它属于设计模式的范畴,就如同其他设计模式一样,模式的出现就是为了对某种功能的优化,而MVC模式可以看做是对三层架构中表现层的一种细分优化
MVC 分层有助于管理复杂的应用程序,因为您可以在一个时间内专门关注一个方面。例如,可以在不依赖业务逻辑的情况下专注于视图设计。同时也让应用程序的测试更加容易。

各模块解析

  • 模型Model):应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。(javaBean)
  • 视图View):应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。(页面)
  • 控制器Control):应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。(servlet控制器)

各模块联系

MVC模式与三层架构

一般Controller在Model和View之间起到了沟通的作用,处理用户在View上的输入,并转发给Model。这样Model和View两者之间可以做到松散耦合,甚至可以彼此不知道对方,而由Controller连接起这两个部分。

三、三层架构

简介

三层架构通常意义上的三层架构就是将整个业务应用划分为:表现层(web层)、业务逻辑层(service层)、数据访问层(持久化层)。区分层次的目的即为了“高内聚、低耦合”的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或称为领域层)、表示层。

各层解析

  • 表现层(Web层):通俗说就是用户所能看到的直观的界面。其作用就是接收用户提交的请求数据,以及将程序对用户请求所产生的响应数据反馈给用户。目的就是为用户提供可交互的操作界面。所以,表现层就像已经搭好的积木。
  • 业务逻辑层(service层):主要是针对具体的问题的操作,根据用户的不同请求而做出不同响应的处理。也可以理解成对数据层的操作,对数据业务逻辑处理,如果说数据层是积木,那逻辑层就是对这些积木的搭建。
  • 数据访问层(持久化):它只是提供对数据库操作的多种途径,是对数据库的操作,而不是数据。不同的数据就好比形状各异的积木,而数据访问层就好比取出或放回这些积木的动作。

各层联系

MVC模式与三层架构

举个搭积木的小栗子
流程:根据积木成型的图纸(表现层),我们会设计该怎样去搭建(业务逻辑层),然后就开始取积木(数据访问层)进行搭建,当我们完成设计流程的时候,积木也就成型了。

 

四、两者区别

MVC(模型Model-视图View-控制器Controller)是一种架构模式,可以用它来创建在域对象和UI表示层对象之间的区分。

同样是架构级别的,相同的地方在于他们都有一个表现层,但是他们不同的地方在于其他的两个层

在三层架构中没有定义Controller的概念。这是最不同的地方。而MVC也没有把业务的逻辑访问(model)看成两个层(业务逻辑层、数据访问层),这是采用三层架构或MVC搭建程序最主要的区别。当然了。在三层中也提到了Model,但是三层架构中Model的概念与MVC中Model的概念是不一样的, “三层”中典型的Model层是由业务逻辑与访问数据组成的。而MVC里,则是以实体类构成的。
上述引自百度百科

 

五、框架和设计模式的区别

有很多程序员往往把框架模式和设计模式混淆,认为MVC是一种设计模式。实际上它们完全是不同的概念。

框架、设计模式这两个概念总容易被混淆,其实它们之间还是有区别的。框架通常是代码重用,而设计模式是设计重用,架构则介于两者之间,部分代码重用,部分设计重用,有时分析也可重用。在软件生产中有三种级别的重用:内部重用,即在同一应用中能公共使用的抽象块;代码重用,即将通用模块组合成库或工具集,以便在多个应用和领域都能使用;应用框架的重用,即为专用领域提供通用的或现成的基础结构,以获得*别的重用性。

框架与设计模式虽然相似,但却有着根本的不同。设计模式是对在某种环境中反复出现的问题以及解决该问题的方案的描述,它比框架更抽象;框架可以用代码表示,也能直接执行或复用,而对模式而言只有实例才能用代码表示;设计模式是比框架更小的元素,一个框架中往往含有一个或多个设计模式,框架总是针对某一特定应用领域,但同一模式却可适用于各种应用。可以说,框架是软件,而设计模式是软件的知识。

框架模式有哪些?

MVC、MTV、MVP、CBD、ORM等等;

框架有哪些?

C++语言的QT、MFC、gtk,Java语言的SSHSSIphp语言的 smarty(MVC模式),python语言的django(MTV模式)等等

设计模式有哪些?

工厂模式、适配器模式、策略模式等等

简而言之:框架是大智慧,用来对软件设计进行分工;设计模式是小技巧,对具体问题提出解决方案,以提高代码复用率,降低耦合度