【.NET特供-第三季】ASP.NET MVC系列:MVC与三层图形对照(颠覆性理论)
在【.NET特供-第三季】系列博客中的第一篇《ASP.NET
MVC系列:MVC与三层图形对照》发表之后,引起了领导的注意。同一时候,开发小组内部在交流MVC和三层之间关系的时候,也感到很的混沌。
在这里对上一篇文中所阐述的错误概念,向读者表示诚挚的歉意。同一时候,很感谢米老师辛勤指导。关于‘MVC与三层图形对照’将在本文中做出修正。
学习是一个过程,对于概念的理解并非一蹴而就的,而是盲人摸象的理论,逐渐清晰。
首先,给大家看一张图。
接下来的内容,将对图中的观点做出论证:
一、从三层->MVC,由链式结构->图形关系。(四步曲)
1、三层:
三层之间存在一种严格的调动关系:
1、U层->B层,B层->D层。
传递的是:命令流,或者理解为方法的调用,是主动的。
2、D层- ->B层,B层- ->U层
传递的是:数据流,或者理解为事件通知/数据传递,是被动的。
- 总结为:
- U、B、D仅仅能顺次调用,接口之间是向下依赖,U不能直接和D进行通信。逆向同理。
- U、B、D之间的关系是平等的。
- 充分体现了一种分层的思想。
2、MVC错误一
错误观点:
- U层=View + Controller
- B层+D层=Model
正解剖析:
- B层=IBLL+BLL
- 三层中的B层,包括了两类信息:
- 调用关系。简单理解为:接口IBLL,告诉我们:要做什么/我要调用谁。
- 业务关系。简单理解为‘实现’,告诉我们:详细的该怎么做。1-2-3……
- Controller=U层的一部分+IBLL
- Controller是控制器,负责指挥*要干*,详细怎么干,他无论。
- View仅仅用于显示
- 能够通过‘映射文件URL引擎’的方式与Controller进行关联
- Model=BLL+D层
- Model包括B层的实现+IDAL+DAL
- 简单理解为:对象+操作(针对对象的)。比如:把‘一个班的信息,和对这个班级的正删改查’封装为一个对象,构成集合类。对于公共性的实现,构成了容器(这里不太清楚)。
(大家来找茬:依据上述的观点,有兴趣的读者能够在图中标注出错误点。文末会给出正确答案)
3、MVC错误二
错误观点:
- MVC和三层一样,都是同级的调用关系
正解剖析:
- MVC中Controller<控制器>起决定性的作用
- View和Model之间的通信,必需要经过C的允许!换句话说
- 仅仅要Controller不允许,View和Model就不能进行通信
- 仅仅有C允许了,View才干和Model进行通信。(是直接通信)
- 举个样例:公司领导就是C控制器,掌管着公司的大小事物。员工想要预支薪水,须要经过领导的批准,然后交给会计部门处理。然后会计部门才干为员工发薪水。实际上运行任务的还是会计部门,前提是领导批准。
- 三层中,遵从严格的调用关系
- U层调用B层,B层调动D层。依次调用,逆序返回。换句话说
- U层和D层是不能进行直接通信的。(而MVC中能够)
(大家来找茬:依据上述的观点,有兴趣的读者能够在图中标注出错误点。文末会给出正确答案)
4、MVC正确
- 调用方式
- 三层:依次调用。
- U层->B层,B层->D层。
- MVC:C是控制器(地位最高)
- C负责控制View和Model之间的通信
- 效率方面
- 三层:效率低。
- U层和D层之间不能进行通信。
- MVC:效率高
- View和Model就能够进行直接通信,加快传输速度(前提是:C允许)。
- 界面的灵活性
- 三层:灵活性差。
- 在ASP.NET中每个.aspx文件以下都耦合了一个.aspx.cs文件。不能单独替换界面
- MVC:灵活性好
- 在C的统一管理之下,用户和数据操作进行有效的隔离。
- V:C=多:1。一个View仅仅能相应一个C,一个C能够管理多个V。能够任意更换View(仅仅须要更改映射文件)。
- 适用场景
- 三层:适用于CS,可用于BS。
- MVC:仅仅能用于BS
- 分层方式不同
- 三层:‘代码’上解耦
- MVC :‘物理’上解耦
- 瘦client,胖server。
- View位于client。降低页面信息,变化降低,对客户机的要求低,仅仅要有浏览器就够了,不须要安装过多的插件
- Controller、Model位于server。
二 思维拓展(带给大家一种学习的方法):
米老师常说‘一张图胜过千言万语’。这说明了什么呢?
- 图形的信息量非常大。
- 所以在画图的过程中要有側重点。从本文的图形进行举例:
- 突出完整实体。
- UBD用不同的‘长方形’来区分边界,而不是‘线段’。
- 耦合。
- U和B之间有明显的界限,突出;‘解耦’的特性
- 命令流和数据流分开。
- 命令流:实线+箭头
- 数据流:虚线+箭头
- 对齐,便于比較。
- 方便图形中的纵向比較
- 人类更擅长对‘图’的记忆。
- 抽象一点能够理解为:人对图形的记忆能力,或者说是理解能力,是远远超过文字的。由于在学习的过程中,多多的借助‘图’的概念去理解知识,更加有助于编制知识网。
三 答案解析:
MVC错误一:
- C职责划分错误
- 由两部分组成:U层中的一部分+B层中的接口
- 对照:B层和C
- B层:让你干什么+怎么干
- C负责指挥:让你干什么!M:怎么干+数据。(构成容器)
MVC错误二:
- C地位错误
- MVC:C<控制器>起决定作用
- View能够和Model进行直接通信。(仅仅要C允许)
- 三层:遵从严格的调用关系。
- 换句话说U层和D层是不能进行直接通信的。(而MVC中能够)
总结:
本文通过图形化的解说方式,从职责划分角度对三层和MVC进行对照。从三层的链式结构,逐渐过滤到MVC的图形关系。希望能为您带来一些帮助。
同一时候强烈推荐:利用‘图’来整理自己的思维。绘图一定要有側重点,突出側重点。而不是让图中的无效信息宣兵夺主。
文末给出了图中的错误观点的理由。也欢迎读者给出自己的见解,相互切磋。
【.NET特供-第三季】ASP.NET MVC系列:MVC与三层图形对照(颠覆性理论)的更多相关文章
- 【.NET特供-第三季】ASP.NET MVC系列:MVC与三层图形对照
近期在开发小组在研究:BS项目中是利用'MVC框架'还是继续沿用'三层'的问题. 由于曾经的.NET项目大多数都是利用三层开发的,所以大多数人都可以对三层进行熟练地运用.而项目的開始我们也曾听说过MV ...
- MVC系列——MVC源码学习:打造自己的MVC框架(四:了解神奇的视图引擎)
前言:通过之前的三篇介绍,我们基本上完成了从请求发出到路由匹配.再到控制器的激活,再到Action的执行这些个过程.今天还是趁热打铁,将我们的View也来完善下,也让整个系列相对完整,博主不希望烂尾. ...
- MVC系列——MVC源码学习:打造自己的MVC框架(一:核心原理)
前言:最近一段时间在学习MVC源码,说实话,研读源码真是一个痛苦的过程,好多晦涩的语法搞得人晕晕乎乎.这两天算是理解了一小部分,这里先记录下来,也给需要的园友一个参考,奈何博主技术有限,如有理解不妥之 ...
- [转]MVC系列——MVC源码学习:打造自己的MVC框架(一:核心原理)
本文转自:http://www.cnblogs.com/landeanfen/p/5989092.html 阅读目录 一.MVC原理解析 1.MVC原理 二.HttpHandler 1.HttpHan ...
- MVC系列——MVC源码学习:打造自己的MVC框架(三:自定义路由规则)
前言:上篇介绍了下自己的MVC框架前两个版本,经过两天的整理,版本三基本已经完成,今天还是发出来供大家参考和学习.虽然微软的Routing功能已经非常强大,完全没有必要再“重复造轮子”了,但博主还是觉 ...
- MVC系列——MVC源码学习:打造自己的MVC框架(二:附源码)
前言:上篇介绍了下 MVC5 的核心原理,整篇文章比较偏理论,所以相对比较枯燥.今天就来根据上篇的理论一步一步进行实践,通过自己写的一个简易MVC框架逐步理解,相信通过这一篇的实践,你会对MVC有一个 ...
- MVC系列1-MVC基础 (ASP.NET)
终于决定写一个系列的文章了,最开始其实是准备写一下WPF的,因为我这两年一直在做WPF,对WPF的喜爱自然是无以言表.但是由于我所在的地区对WPF的普及不是很广泛,所以,被迫又开始做起来web,但是我 ...
- 【ASP.NET MVC系列】浅谈ASP.NET MVC八大类扩展(上篇)
lASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操 ...
- 【ASP.NET MVC系列】浅谈ASP.NET 页面之间传值的几种方式
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...
随机推荐
- 高级I/O函数(3)-tee、fcntl函数
tee函数使用 功能描述:tee函数在两个管道文件描述符之间复制数据,也是零拷贝操作.它不消耗数据,因此源文件描述符仍然可以用于后续的操作. 函数原型: #include <fcntl.h> ...
- Delphi 串口通信(1)
利用 Delphi实现串口通信的常用的方法有 3种: 一是利用控件,如 MSCOMM控件和 SPCOMM控件: 二是使用 API函数: 三是调用其他串口通信程序.其中利用 API编写串口通信程序较为复 ...
- JQuery语法总结和注意事项
1.关于页面元素的引用 通过jquery的$()引用元素包括通过id.class.元素名以及元素的层级关系及dom或者xpath条件等方法,且返回的对象为jquery对象(集合对象),不能直接调用do ...
- Websocket 与代理服务器如何交互? How HTML5 Web Sockets Interact With Proxy Servers
How HTML5 Web Sockets Interact With Proxy Servers Posted by Peter Lubberson Mar 16, 2010 With the re ...
- [mysql]MySql数据类型和java类型对照表
MySQL Type Name Return value ofGetColumnClassName Returned as Java Class BIT(1) (new in MySQL-5.0) B ...
- 兄弟连王牌PHP课程送三重豪礼啦!
兄弟连PHP就业办课程送三重豪礼啦! 惊喜一:报名9月23日班级,保障薪资直涨1000元! 9月报名学习,春节后就业,正是企业招聘的黄金高峰期,一年中拿到高薪最好的时节! 惊喜二:兄弟连云课堂900元 ...
- Ppthon基础学习之Dict
一.什么是字典? 字典是Python语言中唯一的映射类型. 映射类型对象里哈希值(键,key)和指向的对象(值,value)是一对多的的关系,通常被认为是可变的哈希表. 字典对象是可变的,它是一个容器 ...
- Apache 相关配置
1. HTTP缓存设置 ExpiresActive On #ExpiresDefault 设置全局缓存时间,将导致一些get请求不能连续执行 #ExpiresDefault "access ...
- poj 4982 踩方格
4982:踩方格 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 有一个方格矩阵,矩阵边界在无穷远处.我们做如下假设:a. 每走一步时,只能从当前方格移 ...
- LD1-B(最短路径-SPFA)
题目链接 /* *题目大意: *给定v个点的重量,并给定e条边,每条边具有一个权值; *在e条边中选v-1条边使这v个点成为一棵树; *定义这棵树的代价为(每棵子树节点重量和其子树根到父节点的边的权值 ...