感谢博客园团队日夜辛苦的付出

感谢阅读我文章的每位读者

1.MVC简介

  MVC最早于1978年提出,是软件工程中的一种软件架构模式,这时距离微软在1985年推出Window1.0还有7年之久,当时的MVC即所有的输入、输出、逻辑控制,这些都要由软件开发者完全实现。

  MVC模式可以有两种理解:一种是表现模式,另外一种是架构模式。这里先将其理解为表现模式。

  MVC是模型(Model),视图(View)和控制(Controller)的缩写,其目的是实现Web系统的职能分工。其中,Model层实现系统中的业务逻辑(可以先理解为Model层存放的数据是和数据库有关的,后面会讲);View层用于与用户交互(可以先理解为我们所说的网页,后面会讲),通常用Razor和APSX来实现;Controller层是Model与View之前沟通的桥梁,可以分派用户的请求并选择恰当的视图来用于显示,同时还可以解释用户的输入并将它们映射为模型层可执行的操作(可以这样理解:当你View层的网页和用户交互的时候需要对数据进行增删改查、需要响应用户的时候View层的网页把这些需要处理的信息发送到Controller层来进行处理,而处理方式需要你在Controller层里面写处理类了,后面会讲),如图1-1所示。


图1-1

  (1)控制器(Controller)

  接收用户输入,并完成模型、视图的调用。Controller 处理用户交互,从Model中获取数据并将数据传给指定的View。

  (2)视图(View)

  View是用户接口层组件,主要是将Model中的数据暂时给用户。cshtml、ASPX和ASCX文件提供处理视图的职责。

  (3)模型(Model)

  Model主要是存储或者是处理数据的组件,实现业务逻辑层对实体类相应数据库的操作(增删改查),包括数据、验证规则、数据访问和业务逻辑等应用程序信息。Model具有两方面的含义:DomainModel和ViewModel。

  •领域模型 DomainModel:不仅仅是一个实体类,而是整个业务处理流程的一个规则,是实现业务逻辑层对实体类的相应操作,包括逻辑操作与数据库操作,如验证规则、数据访问和业务逻辑等应用程序信息。

  •视图模型 ViewModel:是与显示页面强关联的模型对象,用于实现页面强类型,如做了连接查询得到的结果要显示到前台,就没有相应的对象存在,这时就可以新建一个类来包括结果集中的行。

  此外需要注意的是,Model是独立的组件,并不知道View的存在,也不知道Controller的存在

  过去MVC模式并不适合小型甚至中等规模的应用程序,因为这样会带来额外的工作量,增加应用的复杂性。现在多数软件设计框架(如ASP.NET MVC)都能直接快速提供MVC骨架(例如:visual studio),供中小型应用程序开发,此问题不再存在。在VS下点击文件 =>新建=>项目=>选择ASP.NET Web应用程序(.NET Framework)=>选择MVC,请看图1-2。

图1-2

  这个时候visual studio 会自动给我们生成MVC的基架,如图1-3所示。

图1-3

  对于存在大量用户界面并且逻辑复杂的大型应用程序,MVC将会使软件在健壮性、代码重用和结构方面上一个新的台阶。尽管在最初构建MVC框架时会花费一定的工作量,但是从长远的角度来看它会大大提高后期软件开发的效率。

2.三层架构

  当把MVC当成一种架构模式来理解,就是所谓的三层架构。如图2-1所示。

图2-1

  三层模式是软件工程中的程序设计模式,是MVC设计思想的一种实现。随着技术的发展,现在基本上已经将MVC模式等同于三层模式,包括数据访问层、业务逻辑层、表示层。再细一点可以分为UI层、业务逻辑层、数据访问层、模型层。如果要严格区分,那么UI层是指View与Controller,业务逻辑层、数据访问层、模型层都被包括在Model中。三层之前有着非常强的依赖关系:表示层 <- 业务逻辑层 <- 数据访问层。而且它们之间的数据传递是双向的,并且通常借助实体类传递数据。

1.各层的作用

  (1)数据访问层:主要是对原始数据(数据库或者文本文件等存放数据的形式)的操作层,而不是指原始数据,也就是说,是对数据的操作,而不是数据库,具体为业务逻辑层或表示层提供数据访问。

  (2)业务逻辑层:主要是针对具体问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理,如果说数据层是积木,那么逻辑层就是对这些积木的搭建。

  (3)表示层:主要是表示Web方式,也可以表示成WinForms方式。Web方式也可以表示成aspx,如果逻辑层相当强大和完善,那么无论表示层如何定义和更改,逻辑层都能完善地提供服务。

2.具体的区分方式

  (1)数据访问层:主要看数据层里面有没有包含逻辑处理,实际上它的各个函数主要完成对数据文件的操作,而不必管其他操作。

  (2)业务逻辑层:主要负责对数据层的操作,也就是说把一些数据层的操作进行组合。

  (3)表示层:主要接收用户的请求以及数据的返回,为客户端提供应用程序的访问。

  使用三层架构的好处是:项目结构更清楚,分工更明确,有利于后期的维护和升级。虽然它会带来一定的性能损失(因为当子程序模块未执行结束时主程序模块只能处于等待状态,说明将应用程序划分层次会带来执行速度上的一些损失),但是从团队开发效率角度上来讲却可以感受到大不相同的效果。

MVC简介与三层架构的更多相关文章

  1. MVC模式与三层架构的区别

    之前总是混淆MVC表现模式和三层架构模式,为此记录下. 三层架构和MVC是有明显区别的,MVC应该是展现模式(三个加起来以后才是三层架构中的UI层) 三层架构(3-tier application) ...

  2. 浅析MVC模式与三层架构的区别

    浅析MVC模式与三层架构的区别 三层架构和MVC是有明显区别的,MVC应该是表现模式(三个加起来以后才是三层架构中的UI层).三层架构(3-tier application) 通常意义上的三层架构就是 ...

  3. MVC和普通三层架构的区别

    MVC和普通三层架构的区别 其中这里的模型(Model)和视图(View )是完全区别于三层架构中的模型(Model)和视图(View)的. MVC 1)MVC中的模型(Model)指的是数据模型,用 ...

  4. MVC模式与三层架构和表示层

    1.MVC模式     - Model-View-Controller     - 模型-视图-控制器     - Model(模型)         > 模型分为业务模型,和数据模型     ...

  5. 浅析MVC模式与三层架构的区别01

    三层架构和MVC是有明显区别的,MVC应该是展现模式(三个加起来以后才是三层架构中的UI层)三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI ...

  6. MVC设计模式与三层架构

    三层架构分别是:表示层(Web层).业务逻辑层(BLL层)和数据访问层(DAL层). (1)表示层负责: a.从用户端收集信息 b.将用户信息发送到业务服务层做处理 c.从业务服务层接收处理结果 d. ...

  7. MVC框架与三层架构

    MVC框架 介绍: MVC全名Model View Controller Model:模型的意思,代表业务模型 View:视图的意思,代表用户界面 Controller:控制器的意思,控制器接受用户的 ...

  8. MVC 设计模式与三层架构

    一.JavaEE开发模式 什么是开发模式 模式是在开发过程中总结出的"套路",总结出的一套约定俗成的设计模式 JavaEE模式 model1模式 技术组成 :jsp+javaBea ...

  9. MVC模式(三层架构模式)

    (Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller). MVC模式最早由Try ...

随机推荐

  1. 我的MVP呢?

    Ladies and gentelmen, welcome the MVP of NBA 16-2017 Season:... 呃,等下,好像哪里不对.那是因为,我要说的MVP根本就不是Most Va ...

  2. CentOS7安装ms8可能出现的错误

    参照<在Centos上安装MS8.0的详细过程>:http://muchong.com/html/201507/9145663.html 安装过程中如果库文件不全,会异常终止.报错情况如下 ...

  3. OneZero第三周第二次站立会议(2016.4.5)

    1. 时间: 13:00--13:15  共计15分钟. 2. 成员: X 夏一鸣 * 组长 (博客:http://www.cnblogs.com/xiaym896/), G 郭又铭 (博客:http ...

  4. TabControl中显示和隐藏TabPage页

    在使用TabControl控件时,希望隐藏其中某个选项卡(即TabPage).TabPage类明明提供了一个Hide方法,用在代码中却没有任何效果,甚是奇怪.无奈之余,只好考虑另辟途径 方法一: 设置 ...

  5. css兼容技巧

    CSS兼容常用技巧 请尽量用xhtml格式写代码,而且DOCTYPE影响 CSS 处理,作为W3C标准,一定要加DOCTYPE声明. 1.div的垂直居中问题 vertical-align:middl ...

  6. 2018.12.17 bzoj3667: Rabin-Miller算法(Pollard-rho)

    传送门 Pollard−rhoPollard-rhoPollard−rho板题. 题意简述:给出几个数,让你判断是不是质数,如果不是质数就求出其最大质因子,数的大小为1e181e181e18以内. 先 ...

  7. zip / unzip 的用法

    zip 1.功能作用:压缩文件或者目录 2.位置:/usr/bin/zip 3.格式用法:zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [z ...

  8. 第13章:MongoDB-聚合操作--初体验

    ①MongoDB 的聚合功能 MongoDB 的聚合功能,聚合操作主要用于对数据的批量处理,往往将记录按条件分组以后,然后再进行一系列操作,例如,求最大值.最小值.平均值,求和等操作. 聚合操作还能够 ...

  9. Arria10中PHY的时钟线结构

    发送器时钟网络由发送器PLL到发送器通道,它为发送器提供两种时钟 高速串行时钟——串化器的高速时钟 低速并行时钟——串化器和PCS的低速时钟 在绑定通道模式,串行和并行时钟都是由发送器的PLL提供给发 ...

  10. Effective C++ 随笔(1)

    条款一 c++ 为一个语言联邦 1.四个层次 C:blocks,语句,预处理器,内置数据类型,数组,指针 面向对象的C++:封装,多态,继承 Template C++ STL 条款二 尽量以const ...