MVC和三层架构

本文揭示了作者在理解MVC设计模式和三层架构过程中的心路历程,从最初的混淆到最终认识到两者间的紧密联系。作者通过实例和项目经验,说明MVC不仅是Web框架,也是分层设计原则在不同领域的体现,而三层架构是这种原则在项目实践中的具体应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

一直以来对于MVC设计模式和三层架构体系的理解都不够透彻,对于两个概念的认知过程是比较困难的,最初的状态是“奥,我懂了~”,然后一段时间后转变为“好像不太对,再看看……”,然后是“奥,不是原来想的那样,是这样的!”……这样的过程不断轮换刷新着我对两个概念的认知

总体上我个人对MVC和三层架构的理解可分为三个阶段

阶段一:MVC就是三层架构

先在大学里经老师讲授得知MVC一词,这里引用下百科对MVC的解释

MVC框架:

经典MVC模式中,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。其中,View的定义比较清晰,就是用户界面。

贴一张图片更容易看明白MVC是个啥

在这里插入图片描述

当后来做Java Web项目的时候又接触到三层架构的概念,上网简单查了下资料,同样百科伺候

三层架构:

三层架构就是为了符合“高内聚,低耦合”思想,把各个功能模块划分为表示层(UI)、业务逻辑层(BLL)和数据访问层(DAL)三层架构,各层之间采用接口相互访问,并通过对象模型的实体类(Model)作为数据传递的载体,不同的对象模型的实体类一般对应于数据库的不同表,实体类的属性与数据库表的字段名一致。

在这里插入图片描述

你说巧不巧,都是MVC和三层架构都分了3层,然后我试着将视图层对应表示层,模型对应数据访问层,发现挺合适的,然后控制器也是负责处理流程,在中间起到枢纽作用,对应着业务逻辑层也挺合适,所以我当时的结论:MVC==三层架构

阶段二:MVC和三层架构关系不大

为什么会再次思考这两个概念的关系呢?当时学习SSM的时候,发现Spring MVC为啥名字会带MVC?那既然Spring MVC是一个MVC框架,那Spring和MyBatis在项目中扮演什么角色呢?

额,查资料吧,查来查去看了好多东西,各种各样的说法,主要还是缺乏项目经验,只是纸上谈兵,一开始呢学习的web项目是用Python的Flask框架做的,这里引用下Django的架构设计(Flask的百科没有讲其架构设计)

Django已经成为web开发者的首选框架,是一个遵循 MVC 设计模式的框架。MVC是Model、View、Controller三个单词的简写,分别代表模型、视图、控制器。Django其实也是一个MTV 的设计模式。MTV是Model、Template、View三个单词的简写,分别代表模型、模版、视图 [4] 。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式

但三层架构的概念是学习Java Web项目时接触的概念,很困惑怎么才能把Django的MVC(MTV)模式和常用的SSM三个框架对应起来(这里说一下对该疑惑后来正确理解:Django算是一个完整的Web框架,而Java Web的项目往往采用多个框架整合实现),这个认知过程是最艰难的,最后的结论就是——MVC是Web框架,而三层架构是项目的分层设计理念,所以两个概念不在一个层次上,关系不大

阶段三:实际上MVC和三层架构关系不浅

工作后我重拾这个问题,经过实际项目后,我逐渐加深了对两者的认知程度,首先是MVC和三层架构在软件设计原则上都是一种“分层”的思想,都是为了规范软件开发过程,提高开发效率,明确开发任务,降低维护成本的方案,MVC不仅仅是Web框架,像IOS的App开发也严格遵守该设计模式,只要涉及前后端的系统都都可以遵循MVC框架规范,而三层架构包含的范围可能更广,算是更加宏观的一个概念,很形象的例子就像SSH或SSM,他们其中的一个框架就是一个MVC框架了——我更喜欢把概念和实际应用对应起来理解,例如Spring MVC是表示层(UI)框架,MyBatis是数据访问层框架,Spring主要负责业务逻辑和为整个项目提供IOC容器等

目前来说我对他们的理解可以用绘作两个图来阐述

宏观来看大致可以理解MVC是三层架构的UI层:

在这里插入图片描述

当然,结合实际的项目来理解也可以是这样的,毕竟Model是和数据紧密不分的:

在这里插入图片描述

以上为个人理解,如有不恰当的地方,还请指教,谢谢~

在刚刚步入“多层结构”Web应用程序开发的时候,我阅读过几篇关于“asp.net三层结构开发”的文章。但其多半都是对PetShop3.0Duwamish7的局部剖析或者是学习笔记。对“三层结构”通体分析的学术文章几乎没有。 2005年2月11日,Bincess BBS彬月论坛开始试运行。不久之后,我写了一篇题目为《浅谈“三层结构”原理与用意》的文章。旧版文章以彬月论坛程序中的部分代码举例,通过全局视角阐述了什么是“三层结构”的开发模式?为什么要这样做?怎样做?……而在这篇文章的新作中,配合这篇文章我写了7个程序实例(TraceLWord1~TraceLWord7留言板)以帮助读者理解“三层结构”应用程序。这些程序示例可以在随带的CodePackage目录中找到——   对于那些有丰富经验的Web应用程序开发人员,他们认为文章写的通俗易懂,很值得一读。可是对于asp.net初学者,特别是没有任何开发经验的人,文章阅读起来就感到非常困难,不知文章所云。甚至有些读者对“三层结构”的认识更模糊了……   关于“多层结构”开发模式,存在这样一种争议:一部分学者认为“多层结构”与“面向对象的程序设计思想”有着非常紧密的联系。而另外一部分学者却认为二者之间并无直接联系。写作这篇文章并不是要终结这种争议,其行文目的是希望读者能够明白:在使用asp.net进行Web应用程序开发时,实现“多层结构”开发模式的方法、原理及用意。要顺利的阅读这篇文章,希望读者能对“面向对象的程序设计思想”有一定深度的认识,最好能懂一些“设计模式”的知识。如果你并不了解前面这些,那么这篇文章可能并不适合你现在阅读。不过,无论这篇文章面对的读者是谁,我都会尽量将文章写好。我希望这篇文章能成为学习“三层结构”设计思想的经典文章!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值