理解一般意义上的MVC模式

MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为以下三个基本部分:

  • 模型(Model):模型用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。“模型”有对数据直接访问的权力,例如对数据库的访问。“模型”不依赖“视图”和“控制器”,也就是说,模型不关心它会被如何显示或是如何被操作。
  • 视图(View):视图能够实现数据有目的的显示。在视图中一般没有程序上的逻辑。
  • 控制器(Controller) :控制器起到不同层面间的组织作用,用于控制应用程序的流程。它处理事件并作出响应。“事件”包括用户的行为和数据模型上的改变。

上面的定文来自维基百科。根据上面的定文和我个人的理解,我画了下面这样一张表示MVC各部分关系的图:

  

注意,不同的平台和不同的语言框架对MVC的定义各有不同,并没有一个明确的定义。但大体上,MVC模式中的每个部分是分工明确、界定清晰的。操作数据的逻辑只存在于模型中,呈现数据的逻辑只存在于视图中,处理用户的请求和输入只存在于控制器中。不管应用程序有多大、处于哪段生命周期,这种清晰的关注点分离(separation of concerns)的MVC模式让我们的应用程序更容易维护和扩展。

理解领域模型

领域模型(Domain Model) 是对领域内的概念类或现实世界中对象的可视化表示。又称概念模型、领域对象模型、业务对象模型。它专注于分析问题领域本身,发掘重要的业务领域概念,并建立业务领域概念之间的关系。 领域模型是描述业务用例实现的对象模型,它是对业务角色和业务实体之间应该如何联系和协作以执行业务的一种抽象。

对于MVC应用程序,领域模型是一个非常重要的部分。在某种行业内,我们根据现实世界的实体、相关的操作和规则来创建模型(Model)。对于C#程序来说,领域模型就是一组封装现实世界对象的C#类型(类、结构等);领域内对对象的一些操作(或者叫处理),则是定义在C#类型中的方法(Method);而领域内对对象操作的一些规则就是方法内部的逻辑处理,比如C#中的属性读写器的get和set方法对读写类成员的控制。举个例子:
比如银行这个领域,个人的“银行帐户”可以建成一个模型。每个账户都有“银行卡消费”这项操作,即银行账户模型下的一个方法。“不能透支消费”是对这个帐户使用银行卡的约束规则,这个规则就是定义在银行卡消费方法内部的逻辑处理。

上面说的虽然有点抽象,但还是很容易理解的。而我对领域模型的理解只能到这里了,朋友们好好体会吧。总之,在MVC应用程序中,我们要有这样一个概念:要通过Model操作数据,或添加一项操作,或给某项操作添加、改变一个规则,这些都是在改变应用程序的领域模型。

理解ASP.NET中的MVC

概括的讲ASP.NET MVC有如下特点:

  1. 通过把项目分成model view和controller,这种任务分离(亦称关注点分离),使得复杂项目更加容易维护,另外测试驱动组件使得应用程序也更加容易测试。
  2. 可扩展的简便的框架。mvc框架被设计用来更轻松的移植和定制功能。你可以加入自己的视图引擎,url重写策略,重载action方法等。mvc也支持Dependency Injection (DI) 和 Inversion of Control (IOC)。强大的url重写机制让你更方便的建立容易理解和可搜索的url。url可以不包含任何文件扩展名,并且可以重写url使其对搜索引擎更加友好。
  3. 对现有的asp.net程序的支持,可以使用asp.net现有的页面标记、用户控件、模板页、数据绑定等等。
  4. ……

在ASP.NET MVC中,控制器通常是继承System.Web.Mvc.Controller的类。控制器中类的每个公共方法被称为Action方法。ASP.NET路由系统内部根据请求的URL和路由配置调用对应的Action方法,完成领域模型的操作后,再选择一个视图呈现给客户端。下图显示了ASP.NET MVC中Controller、Model和View之间的关系:

另外,ASP.NET MVC框架可以使用任何被.NET支持的数据库、ORM框架和其他工具。

对于初学者,我觉得对ASP.NET MVC的概念了解到这就差不多了。如果想更好的理解ASP.NET中 MVC的概念建议访问MSDN文档
如果你是新手,为了帮助理解,建议你到网上找几个几个简单的Demo做做。

参考:《Pro ASP.NET MVC 3 Framework》

理解MVC模式的更多相关文章

  1. ASP.NET MVC 理解MVC模式

    ASP.NET MVC 理解MVC模式 PS:MVC出来很久了,工作上一直没机会用,所以我也没去学.出于兴趣,工作之余我将展开对MVC的深入学习,通过博文来记录所学所得,并希望能得到各位园友的斧正. ...

  2. [ASP.NET MVC 小牛之路]01 - 理解MVC模式

    本人博客已转移至:http://www.exblr.com/liam  PS:MVC出来很久了,工作上一直没机会用.出于兴趣,工作之余我将展开对MVC的深入学习,通过博文来记录所学所得,并希望能得到各 ...

  3. [概念理解] MVC模式和C++的实现

    [转]学习可以是一件很快乐的事,特别是当你发现以前所学的点点滴滴慢慢地能够串起来或者变成了一个环,这种感觉真好.这篇文章就这么来的. 从MVC架构开始说起吧.这两天系统了解了一下MVC架构的内容,主要 ...

  4. 深入理解MVC模式

    一,什么是MVC模式 该模式是一种软件设计典范,他把软件系统划分为三个基本部分:模型层(Model).视图层(View).控制器(Controller) *Model(模型)表示应用程序核心(比如数据 ...

  5. ASP.NET MVC:01理解MVC模式

    ASP.NET MVC是ASP.NET Web应用程序框架,以MVC模式为基础. MVC:Model View Controller 模型-视图-控制器Model(模型):负责对数据库的存取View( ...

  6. 【ASP.NET MVC 学习笔记】- 01 理解MVC模式

    本文参考:http://www.cnblogs.com/willick/p/3195560.html 1.MVC模式是软件系统的一种架构模式,它将软件分为三大模块: 模型(Model):封装业务逻辑以 ...

  7. Pro ASP.NET MVC –第三章 MVC模式

    在第七章,我们将创建一个更复杂的ASP.NET MVC示例,但在那之前,我们会深入ASP.NET MVC框架的细节:我们希望你能熟悉MVC设计模式,并且考虑为什么这样设计.在本章,我们将讨论下列内容 ...

  8. [转载]WIKI MVC模式

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

  9. MVC 模式——第3章

    在深入到 ASP.NET MVC 框架的细节之间,最好熟悉 MVC 的设计模式及其背后的思想.良好地理解 MVC 背后的内容,有助于在阅读本书的过程中将该框架的特性放到相关的情境之中. 3.2 理解 ...

随机推荐

  1. 第四课,T语言运算符(版本5.0)

    TC综合开发工具里支持了丰富的运算符,这样也要求大家对运算符的知识必须了解清楚,否则出现错误还不知道问题所在下面就为大家说说运算符的优先级与各个运算符含义 注意: 优先级代表同一表达式中运算符的运算顺 ...

  2. JS 的线程、事件循环、任务队列简介

    JS 是单线程的,但是却能执行异步任务,这主要是因为 JS 中存在事件循环(Event Loop)和任务队列(Task Queue). 事件循环:JS 会创建一个类似于 while (true) 的循 ...

  3. 黑马程序员——JAVA基础之String和StringBuffer

    ------- android培训.java培训.期待与您交流! ---------- String类: 字符串是一个特殊的对象. 字符串一旦初始化就不可以被改变. String str = &quo ...

  4. .c和.h文件的区别(转载)

    一个简单的问题:.c和.h文件的区别学了几个月的C语言,反而觉得越来越不懂了.同样是子程序,可以定义在.c文件中,也可以定义在.h文件中,那这两个文件到底在用法上有什么区别呢? 2楼:子程序不要定义在 ...

  5. VGG-19 和 VGG-16 的 prototxt文件

    VGG-19 和 VGG-16 的 prototxt文件  VGG-19 和 VGG-16 的 prototxt文件 VGG-16:prototxt 地址:https://gist.github.co ...

  6. JSBinding + SharpKit / Important Notes

    Serialization of List<T> is not supported. 1 public int v; // SUPPORTED 2 public GameObject go ...

  7. Is it possible to configure PostgreSQL to automatically close idle connections?

    1.use pgbouncer As new connections/transactions/statements arrive, the pool will increase in size up ...

  8. MySQL中char(36)被认为是GUID导致的BUG及解决方案

    MySQL中char(36)被认为是GUID导致的BUG及解决方案 有时候在使用Toad或在程序中,偶尔会遇到如下的错误: System.FormatException GUID 应包含带 4 个短划 ...

  9. linux -samba

    yum install samba samba-client samba-swat samba-common-3.6.9-151.el6.x86_64 //主要提供samba服务器的设置文件与设置文件 ...

  10. html之内联标签a

    a标签:定义超链接,用于从一个页面链接到另一个页面,最重要的属性href,如果没有href属性,则不可以使用如下属性:download,hreflang,media,rel,target,type. ...