一、一般意义上的MVC模式

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

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

可用下面的图来帮助理解:

注意,不同的平台和不同的语言框架对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框架和其他工具。

转自:http://www.cnblogs.com/willick/p/3195560.html

MVC--初步理解(01)的更多相关文章

  1. MVC — 初步理解IIS工作流程

    声明:本文只是自己的总结和积累.IIS7.x 目录 IIS流程及组成部分 ASP.NET流程及组成部分 IIS与ASP.NET  MVC 一.IIS流程及组成部分 1.Http.SYS:负责监听HTT ...

  2. springBoot(1)---springboot初步理解

    springboot初步理解 在没有用SpringBoot之前,我们用spring和springMVC框架,但是你要做很多比如: (1)配置web.xml,加载spring和spring mvc 2) ...

  3. Mysql加锁过程详解(7)-初步理解MySQL的gap锁

    Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...

  4. javascript 原型及原型链的初步理解

    最近折腾了好久,终于是把js里面的原型和原型链做了个初步的理解: 在这里,我打个比喻: 我(child),我妈constructor(构造函数)生了我:别人问我老妈跟谁生的我,于是此时我妈会指向我爸爸 ...

  5. Spring学习笔记--环境搭建和初步理解IOC

    Spring框架是一个轻量级的框架,不依赖容器就能够运行,像重量级的框架EJB框架就必须运行在JBoss等支持EJB的容器中,核心思想是IOC,AOP,Spring能够协同Struts,hiberna ...

  6. Graph Cuts初步理解

    一些知识点的初步理解_8(Graph Cuts,ing...) Graph cuts是一种十分有用和流行的能量优化算法,在计算机视觉领域普遍应用于前背景分割(Image segmentation).立 ...

  7. 【MVC学习笔记01】初窥奥秘

    前言 最近工作落实了,是我非常喜欢的无线前端,会接触很多新东西啦,需要努力才行.因为会用到backbone,所以要学习MVC啦. MVC(模型-视图-控制器),这种模式最早被用于构建桌面程序和服务器端 ...

  8. MVC+EF 理解和实现仓储模式和工作单元模式

    MVC+EF 理解和实现仓储模式和工作单元模式 原文:Understanding Repository and Unit of Work Pattern and Implementing Generi ...

  9. WebForm和Asp.Net MVC的理解

    我对WebForm和Asp.Net MVC的理解   比较WebForm和Mvc的请求处理方式 首先简单了解一下Asp.Net中怎么对页面进行请求处理的: 在管道的第7-8个事件之间,有一个MapHt ...

  10. 非常易于理解‘类'与'对象’ 间 属性 引用关系,暨《Python 中的引用和类属性的初步理解》读后感

    关键字:名称,名称空间,引用,指针,指针类型的指针(即指向指针的指针) 我读完后的理解总结: 1. 我们知道,python中的变量的赋值操作,变量其实就是一个名称name,赋值就是将name引用到一个 ...

随机推荐

  1. 防止sql注入的小函数 以及一些小验证

    function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialch ...

  2. python爬虫实践教学

    i春秋作家:Mochazz 一.前言 这篇文章之前是给新人培训时用的,大家觉的挺好理解的,所以就分享出来,与大家一起学习.如果你学过一些python,想用它做些什么又没有方向,不妨试试完成下面几个案例 ...

  3. 套接字:Socket

    在进行通信之前,一般要先建立Socket连接,Socket编程是端到端的通信,往往意识不到中间经过了多少局域网,多少路由器,他能操作的是端到端协议之上的网络层和传输层. 在网络层,Socket函数可以 ...

  4. Fiddler抓包连接失败502的解决方法

    本篇用户记录,在用Fiddler遇到过的坑,首先, 先上图,遇到的问题,提示主机连接失败.只是打开Fiddler,不会报这个问题,只有当Fiddler和火狐浏览器一起启动的时候,才会报这个错. 尝试去 ...

  5. 检查iOS项目中是否使用了IDFA

    (1)什么是IDFA 关于IDFA,在提交应用到App Store时,iTunes Connect有如下说明:   这里说到检查项目中是否包含IDFA,那如何来对iOS项目(包括第三方SDK)检查是否 ...

  6. android的电话监听

    android的电话监听 新建一个项目,结构图如下: PhoneService: package com.demo.tingdianhua; import android.app.Service; i ...

  7. Mac 安装 Ruby, Rails 运行环境

    对于新入门的开发者,如何安装 Ruby, Ruby Gems 和 Rails 的运行环境可能会是个问题,本页主要介绍如何用一条靠谱的路子快速安装 Ruby 开发环境. 次安装方法同样适用于产品环境! ...

  8. JVM 运行时数据区详解

    一.运行时数据区 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同数据区域. 1.有一些是随虚拟机的启动而创建,随虚拟机的退出而销毁,所有的线程共享这些数据区. 2.第二种则 ...

  9. ES6基础教程一 学习笔记

    一.变量的声明 1.var 声明全局变量 在ES6中var用来声明全局变量. 2.let 声明局部变量 3.const 声明常量 二.变量的解构赋值 //1.数组赋值 let [a,b,c]=[1,2 ...

  10. Makefile中.PHONY的作用

    单词phony (即phoney)的意思是:伪造的,假的.来自collins的解释是: If you describe something as phoney, you disapprove of i ...