【.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错误一

 错误观点:

  1. U层=View + Controller            
  2. B层+D层=Model

正解剖析:

  1. B层=IBLL+BLL

    • 三层中的B层,包含了两类信息:

      • 调用关系。简单理解为:接口IBLL,告诉我们:要做什么/我要调用谁。           
      • 业务关系。简单理解为‘实现’,告诉我们:具体的该怎么做。1-2-3……
  2. Controller=U层的一部分+IBLL
    • Controller是控制器,负责指挥*要干*,具体怎么干,他不管。
  3. View只用于显示
    1. 可以通过‘映射文件URL引擎’的方式与Controller进行关联
  4. Model=BLL+D层
    • Model包含B层的实现+IDAL+DAL
      • 简单理解为:对象+操作(针对对象的)。例如:把‘一个班的信息,和对这个班级的正删改查’封装为一个对象,构成集合类。对于公共性的实现,构成了容器(这里不太清楚)。

(大家来找茬:根据上述的观点,有兴趣的读者可以在图中标注出错误点。文末会给出正确答案)

  3、MVC错误二

错误观点:

  1. MVC和三层一样,都是同级的调用关系

正解剖析:

  1. MVC中Controller<控制器>起决定性的作用

    • View和Model之间的通信,必须要经过C的同意!换句话说

      • 只要Controller不同意,View和Model就不能进行通信
      • 只有C同意了,View才能和Model进行通信。(是直接通信)
    • 举个例子:公司领导就是C控制器,掌管着公司的大小事物。员工想要预支薪水,需要经过领导的批准,然后交给会计部门处理。然后会计部门才能为员工发薪水。实际上执行任务的还是会计部门,前提是领导批准。
  2. 三层中,遵从严格的调用关系
    • U层调用B层,B层调动D层。依次调用,逆序返回。换句话说

      • U层和D层是不能进行直接通信的。(而MVC中可以)

(大家来找茬:根据上述的观点,有兴趣的读者可以在图中标注出错误点。文末会给出正确答案)

  4、MVC正确

  1. 调用方式

    1. 三层:依次调用。

      • U层->B层,B层->D层。
    2. MVC:C是控制器(地位最高)
      • C负责控制View和Model之间的通信
  2. 效率方面
    1. 三层:效率低。

      • U层和D层之间不能进行通信。
    2. MVC:效率高
      • View和Model就可以进行直接通信,加快传输速度(前提是:C同意)。
  3. 界面的灵活性
    1. 三层:灵活性差。

      • 在ASP.NET中每一个.aspx文件下面都耦合了一个.aspx.cs文件。不能单独替换界面
    2. MVC:灵活性好
      • 在C的统一管理之下,用户和数据操作进行有效的隔离。
      • V:C=多:1。一个View只能对应一个C,一个C可以管理多个V。可以随意更换View(只需要更改映射文件)。
  4. 适用场景
    1. 三层:适用于CS,可用于BS。
    2. MVC:只能用于BS
  5. 分层方式不同
    1. 三层:‘代码’上解耦
    2. MVC :‘物理’上解耦
      • 瘦客户端,胖服务器。
        • View位于客户端。减少页面信息,变化降低,对客户机的要求低,只要有浏览器就够了,不需要安装过多的插件
        • Controller、Model位于服务器。

二 思维拓展(带给大家一种学习的方法):

 米老师常说‘一张图胜过千言万语’。这说明了什么呢?

  1. 图形的信息量很大。

    • 所以在绘图的过程中要有侧重点。从本文的图形进行举例:

      • 突出完整实体。

        • UBD用不同的‘长方形’来区分边界,而不是‘线段’。
      • 耦合。
        • U和B之间有明显的界限,突出;‘解耦’的特性
      • 命令流和数据流分开。
        • 命令流:实线+箭头
        • 数据流:虚线+箭头
      • 对齐,便于比较。
        • 方便图形中的纵向比较
  2. 人类更擅长对‘图’的记忆。
      

    • 抽象一点可以理解为:人对图形的记忆能力,或者说是理解能力,是远远超过文字的。因为在学习的过程中,多多的借助‘图’的概念去理解知识,更加有助于编制知识网。

三 答案解析: 

  MVC错误一:

  1. C职责划分错误

    1. 由两部分组成:U层中的一部分+B层中的接口
  2. 对比:B层和C
    • B层:让你干什么+怎么干
    • C负责指挥:让你干什么!M:怎么干+数据。(构成容器)

  MVC错误二:

  1. C地位错误

    1. MVC:C<控制器>起决定作用

      • View可以和Model进行直接通信。(只要C同意)
    2. 三层:遵从严格的调用关系。
      • 换句话说U层和D层是不能进行直接通信的。(而MVC中可以)

总结:

    本文通过图形化的讲解方式,从职责划分角度对三层和MVC进行对比。从三层的链式结构,逐渐过滤到MVC的图形关系。希望能为您带来一些帮助。

    同时强烈推荐:利用‘图’来整理自己的思维。画图一定要有侧重点,突出侧重点。而不是让图中的无效信息宣兵夺主。

    文末给出了图中的错误观点的理由。也欢迎读者给出自己的见解,相互切磋。

【.NET特供-第三季】ASP.NET MVC系列:MVC与三层图形对比(颠覆性理论)

时间: 2024-11-07 00:21:40

【.NET特供-第三季】ASP.NET MVC系列:MVC与三层图形对比(颠覆性理论)的相关文章

【.NET特供-第三季】ASP.NET MVC系列:MVC与三层图形对比

最近在开发小组在研究:BS项目中是利用'MVC框架'还是继续沿用'三层'的问题. 由于以前的.NET项目大多数都是利用三层开发的,所以大多数人都能够对三层进行熟练地运用.而项目的开始我们也曾听说过MVC的概念,但是因为没有项目经验的原因,所以总是停留在理论层次的比较. 在后期的DRP项目中,了解到Model1和Model2模型,而Model2模型就是MVC的应用.DRP中我们采用jsp做View层用于显示:Servlet做Controller用于取得表单参数.调用业务逻辑.转向页面: 同样都是M

MVC系列——MVC源码学习:打造自己的MVC框架(四:自定义视图)

前言:通过之前的三篇介绍,我们基本上完成了从请求发出到路由匹配.再到控制器的激活,再到Action的执行这些个过程.今天还是趁热打铁,将我们的View也来完善下,也让整个系列相对完整,博主不希望烂尾.对于这个系列,通过学习源码,博主也学到了很多东西,在此还是把博主知道的先发出来,供大家参考. 本文原创地址:http://www.cnblogs.com/landeanfen/p/6019719.html MVC源码学习系列文章目录: MVC系列——MVC源码学习:打造自己的MVC框架(一) MVC

MVC系列——MVC源码学习:打造自己的MVC框架(二:附源码)

前言:上篇介绍了下 MVC5 的核心原理,整篇文章比较偏理论,所以相对比较枯燥.今天就来根据上篇的理论一步一步进行实践,通过自己写的一个简易MVC框架逐步理解,相信通过这一篇的实践,你会对MVC有一个更加清晰的认识. 本文原创地址:http://www.cnblogs.com/landeanfen/p/6000978.html 这篇博主打算从零开始一步一步来加上MVC里面用到的一些技术,整篇通过三个版本,逐步完善. 一.版本一:搭建环境,实现MVC请求 通过上篇的介绍,我们知道,MVC里面两个最

【.NET特供-第三季】ASP.NET MVC系列:MVC与三层图形对照

近期在开发小组在研究:BS项目中是利用'MVC框架'还是继续沿用'三层'的问题. 由于曾经的.NET项目大多数都是利用三层开发的,所以大多数人都可以对三层进行熟练地运用.而项目的開始我们也曾听说过MVC的概念,可是由于没有项目经验的原因,所以总是停留在理论层次的比較. 在后期的DRP项目中,了解到Model1和Model2模型,而Model2模型就是MVC的应用.DRP中我们採用jsp做View层用于显示:Servlet做Controller用于取得表单參数.调用业务逻辑.转向页面: 相同都是M

【.NET特供-第三季】ASP.NET MVC系列:传统WebForm网站和MVC网站运行机制对比

本文以图形化的方式,从'运行机制'方面对比传统WebForm网站和MVC网站. 请参看以下图形: 一.运行机制 当我们访问一个网站的时候,浏览器和服务器都是做了哪些动作呢? (本文只是提供一个简单的运行过程,有兴趣的找资料研究一下复杂的网络过程.) (一)WebForm网站运行机制 假设为:www.baidu.com/index.aspx 1.Http请求(物理地址:index.aspx) ①发送请求 浏览器向服务器发送请求报文,此时由IIS虚拟目录接受.(通过配置过IIS,把网站挂载在服务器上

【转】【ASP.NET MVC系列】浅谈ASP.NET 页面之间传值的几种方式

ASP.NET MVC系列文章 原文地址:https://www.cnblogs.com/wangjiming/p/6275854.html [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作篇)(下) [04]浅谈ASP.NET框架 [05]浅谈ASP.NET MVC运行过程 [06]浅谈ASP.NET MVC 控制器 [07]浅谈ASP.NET MVC 路由 [08]浅谈AS

[Asp.net MVC]Asp.net MVC5系列——在模型中添加验证规则

目录 概述 在模型中添加验证规则 自定义验证规则 伙伴类的使用 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net MVC5系列——添加视图 [Asp.net MVC]Asp.net MVC5系列——添加模型 [Asp.net MVC]Asp.net MVC5系列——从控制器访问模型中的数据 [Asp.net MVC]Asp.net MVC5系列——添加数据 概述 上篇文章中介绍了添加数据,在提交表单的数据的时候,我们需

Asp.net MVC]Asp.net MVC5系列——在模型中添加

目录 概述 在模型中添加验证规则 自定义验证规则 伙伴类的使用 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列--第一个项目 [Asp.net MVC]Asp.net MVC5系列--添加视图 [Asp.net MVC]Asp.net MVC5系列--添加模型 [Asp.net MVC]Asp.net MVC5系列--从控制器访问模型中的数据 [Asp.net MVC]Asp.net MVC5系列--添加数据 概述 上篇文章中介绍了添加数据,在提交表单的数据的时候,我们需

Asp.net MVC]Asp.net MVC5系列——Razor语法

目录 概念 Razor语法 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列--第一个项目 [Asp.net MVC]Asp.net MVC5系列--添加视图 [Asp.net MVC]Asp.net MVC5系列--添加模型 [Asp.net MVC]Asp.net MVC5系列--从控制器访问模型中的数据 [Asp.net MVC]Asp.net MVC5系列--添加数据 [Asp.net MVC]Asp.net MVC5系列--在模型中添加验证规则 [Asp.net