阅读本文必须明白的事情

首先需要明白的是不同语言实现的MVC与三层架构对应的层是不一样的!!!

.net来说,.net实现MVC与其他语言的MVC具体实现是不同的,asp.net MVCMVC 这两词不是同一个东西

MVC是思想,而asp.net MVC是微软.NET平台对MVC的一个具体实现。(并且在细节上也有些不同,模型也是不一样的),在asp.net MVC中,它是属于三层架构的UI(表示层),即model,controller,view都是同属于三层架构的UI(表示层),后面会详细讲述为什么

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

见图:

所以说,不同语言实现MVC思想的方式是不同的,不能混为一谈,所以下面的内容以.net MVC为基础,将与三层架构直接的联系与区别

1. MVC框架(思想)

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

1.1 对于.net (core) MVC来说

M 即Model(模型层),主要负责Controller和View之间的数据传递
V 即View(视图层),主要用于显示数据和提交数据
C 即Controller(控制器),主要是用作捕获请求并控制请求转发

1.2 对于JavaWeb MVC来说

首先先解释一下MVC。V即View.是视图的意思。C即Controler.是控制器的意思。而M即Model,是模型的意思。这三个里.最不容易理解的应该是Model.就是什么是Model,而为什么叫Model。我先不说为什么叫Model,先解释Controler。

Controller是控制器的意思,所谓控制器,就是将用户请求转发给模型层,经过处理后把结果返回到界面展现的一个中间层,那么Controler到底管什么工作呢?先不说.先来看下在Java Web中这三个层一般的定义,一般在Java Web里,JSP充当V,Servlet充当C,JavaBean充当M,这里的Servlet管什么工作呢?接受输入,转到Model层去处理,处理结果保存后转发到JSP,然后展现数据。所以它的功能就是控制器的基本功能,它就管转发,在V和M之间转来转去。

再来说说M,即Model,在Java Web里说的是JavaBean,我认识的很多人都把JavaBean误认为是实体类,其实JavaBean有比实体类更丰富的定义,在JavaBean中除了其属性和字段,还可以有行为及其事件,JavaBean可以理解为普通Java对象。Java普通对象,就是符合Java规范的所有对象,这和实体类完全是两回事。所以,我认为在MVC中。业务逻辑和数据访问应该放在Model层,也就是V负责展示数据,Controler除了转发不做业务逻辑。真正的逻辑事务,数据访问,甚至算法都放到Model去。

1.3 MVC总结

MVC模式是一种复合设计模式,一种在特定场合用于解决某种实际问题来得出的可以反复实践的解决方案。巧合的是他也有三个事物组成,于是乎人们就有了一种想当然的对应关系:展示层-View;业务逻辑层-Control;持久层-Model。
首先MVC中的三个事物之间并不存在明显的层次结构,没有明显的向下依赖关系,相反的,View和Model往往是比较独立的,而Control是连接两者的桥梁,他们更像是横向的切分。这样一来就出现一个结果,MVC中每个块都是可以独立测试的,而三层结构中,上层模块的运行测试势必要提供下层代码或者提供相同接口的桩。相对来说,MVC复杂得多,但是结构更清晰,耦合性更低。

2. 三层架构

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

这里有个大佬写的非常好,点击此处去看三层架构,博主不在赘述

简单来说,三层架构是层的概念,是大的方向,上下层的那种关系,每一层都有自己的通道,而MVC更类似于模块,一层可以有多个模块,也可以多个模块不在同一层,在不同层

3. MVC与三层架构的联系

这里明确一点,以asp.net (core) MVC来说的,javaweb与三层架构的联系在最前面的-阅读本文必须明白的事情-里面有提到

首先先用一个比喻来说asp.net (core) MVC三层架构的关系:
分层关键字是“层”,是楼层那样竖直方向一层层的,上层依赖下层,而MVC根本不是“层”,要是打个比喻,就相当于我建了一座3层的房子,在顶层这层分了3个房间,分别名为M、V、C,每个房间算是一个模块

补充一下,上面的比喻说的是asp.net (core) MVCasp.net (core) MVC是在表现层的解决方案(它处于三层里的表现层),注意asp.net (core) MVC是在.Net平台下实现MVC思想的一套框架,而其他平台(JAVA PHP)里具体的MVC框架可不一定处于表现层,会跨一些层的。

另外不要混淆概念:MVC是思想,而ASP.NET MVC是微软.NET平台对MVC的一个具体实现。(并且在细节上也有些不同,模型也是不一样的)

现在具体来说不同之处:

  • MVC的V没什么好说的,是直接与用户交互的界面,肯定属于三层架构的UI层
  • MVC中的M可以看做是View模型,负责Controller和View之间的数据传递,但是这个M(Model)是和三层中的Entity(实体)是不同的,这个Model可不是数据库中的实体,它仅仅是传递数据,我们平常在Controller里给View传递的Model一般都是ViewModel,而不是真正意义上的实体(Entity)
  • MVC中的C就是Controller,它里面可以有少量的UI逻辑,主要作用是接受、发送请求,并和业务逻辑层(BLL)交互

总结:

总的来说,ASP.NET MVC,这里MVC只是作为三层的UI层,而MVC中的M通常不是操作数据库的Model,而是作为传递给ViewViewModel,然后控制器Controller调用业务逻辑层(BLL)BLL专门处理业务逻辑,也就是我们经常建立的Services文件夹,里面定义一些接口之类的来实现业务逻辑,控制器Controller调用就可以了【当然控制器可以有一些自己的UI逻辑,但是绝大部分业务逻辑肯定不写在控制器里面,而是以调用的形式来实现的】,而在业务逻辑层(BLL)里调用数据访问层(DAL)表现为实现linq语言对数据库进行交互】,最后控制器Controller得到数据在封装成ViewModel来和View进行数据交互即可

按整个MVC思想来说,MVC(模型Model-视图View-控制器Controller)是一种设计模式,我们可以用它来创建在域对象和UI表示层对象之间的区分。

相同的地方在于他们都有一个表现层,但是他们不同的地方在于其他的两个层。

在三层架构中没有定义Controller的概念。这是我认为最不同的地方。而MVC也没有把业务的逻辑访问看成两个层,这是采用三层架构或MVC搭建程序最主要的区别。当然了。在三层中也提到了Model,但是三层架构中Model的概念与MVC中Model的概念是不一样的,“三层”中典型的Model层是以实体类构成的,而MVC里,则是由业务逻辑与访问数据组成的(不同语言的具体实现会导致model的组成不同,但肯定不是三层架构的那个实体entity)。

关于MVC与三层架构、个人总结网上杂七杂八得出的最终成果、asp.net (core) MVC、JavaWeb的MVC相关推荐

  1. JavaWeb——MVC与三层架构

    文章目录 JavaWeb--MVC与三层架构 1.三层架构 2.MVC 3.MVC与三层架构的对应联系 4.MVC与三层架构的区别 JavaWeb--MVC与三层架构 1.三层架构 三层架构 (3-t ...

  2. MVC与三层架构区别

    我们平时总是将三层架构与MVC混为一谈,殊不知它俩并不是一个概念.下面我来为大家揭晓我所知道的一些真相. 首先,它俩根本不是一个概念. 三层架构是一个分层式的软件体系架构设计,它可适用于任何一个项目. ...

  3. MVC与三层架构的联系及三层架构实现学生注册功能

    MVC与三层架构的联系及三层架构实现学生注册功能 三层架构的逻辑关系: MVC和三层架构的联系: 三层架构实现学生注册功能的逻辑: 学生注册页面: 输入学生信息: 完成学生注册: 代码实现: add. ...

  4. 关于MVC与三层架构

    我认为MVC设计模式,关键在于构建Model,Model就是MVC模式的灵魂,他包含了三层架构里面的 "实体规范层"."行为规则层"."数据访问层&q ...

  5. MVC与三层架构模型笔记

    文章目录 1. MVC 1.1 什么是MVC 1.2 为什么需要MVC 2. 项目的三层架构 2.1 表现层 User Interface layer 2.2 业务逻辑层 Business Logic ...

  6. 浅谈 MVC与三层架构

    引言: 使用Eclipse开发工具写Java Web项目时会发现,一个中型或者大型项目 随着代码的增多,会发现:代码既可以写在src目录下,也可以写在WebContent目录下.src下可以建很多包 ...

  7. MVC与三层架构理解

    文章目录 1. JSP的发展 2. MVC思想 优缺点 3. 三层架构 为什么使用三层 三层优缺点 4. MVC与三层架构的区别 1. JSP的发展 早期只有Servlet,只能使用response输 ...

  8. MVC与三层架构之间的关系

    一. MVC MVC是软件工程中的一种软件架构模式,分为Model(模型).View(视图).Controller(控制器) 1. Model model是应用对象,程序员编写程序应有的功能(实现算法 ...

  9. 什么是 MVC 和 三层架构?

    什么是 MVC 和 三层架构? MVC 全名是 Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻 ...

最新文章

  1. java help
  2. 使用Python在Selenium WebDriver中获取WebElement的HTML源代码
  3. Java中获取Date的昨天代码实现
  4. HBase常用的Shell命令
  5. 预约清单ui设计_持续交付质量设计所需的UI清单
  6. 建筑公司木地板WordPress企业网站模板
  7. python函数模块关键代码_从零开始学Python(六):函数,模块和类的使用
  8. Redis:复制,第1部分——概述 复制与分片、哨兵与集群、Redis拓扑
  9. java项目目录_Java项目目录解释
  10. [bzoj4874]筐子放球
  11. matlab分布鲁棒优化程序 是学习wasserstein 距离 分布鲁棒的好程序 文章是基于综合能源的分布鲁棒优化
  12. AI读书笔记:《剑桥五重奏—机器能思考吗?》
  13. 出现Cannot find module 'xxx' 错误
  14. 计算器软件设计和计算机软件设计区别,基于LabVIEW的计算器程序设计
  15. Qt简单实现雷达扫描[附源码]
  16. 未来计算机畅想英语作文,畅想未来的生活英语作文
  17. 动态域名解析概述及操作步骤讲解
  18. 自制Base64编码解码器
  19. localhost:8080打不开本地网页
  20. 华为Weautomate ai初级教程1

热门文章

  1. java多线程机制_Java的多线程机制
  2. python办公模块_Python 办公自动化教程
  3. Hyperledger Fabric PHP SDK
  4. STM32配置一般过程(持续更新中)
  5. 基于 react, redux 最佳实践构建的 2048
  6. nginx 负载均衡 重温之火与apache的碰撞
  7. Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式…)介绍(转)
  8. 前端工程师现在需要掌握的是什么?
  9. 用shell脚本配置oracle安装需求
  10. 隔行如隔山 -- 乱弹技术,经济,对日外包