《Pro ASP.NET MVC 3 Framework》学习笔记之三【MVC模式介绍】

主题:MVC模式

1.MVC的历史:

MVC(model-view-controller)这个概念在20世纪70年代就已经被使用了,MVC是从Smalltalk项目中提出的。所以原始的MVC模式所包含非常好的细节跟Smalltalk项目的具体概念是紧密相关的。我们假定View是无状态的,跟mvc的应用程序的交互遵循这样一个的过程:用户产生行为造成view更新,这刚好跟Web应用程序通过HTTP请求和响应的本质吻合。而且,mvc强调分解关注点的思想--领域模型和控制逻辑跟UI的松耦合,这意味着大量的HTML是可以独立其他部分而存在,这也使得维护和测试更加的简单。当然,这也是Ruby on Rails在mvc里面一直推崇和主张的,也是许多其他的MVC框架吸收和阐释的一个优点,当然也包括了ASP.NET MVC框架。

2.理解MVC模式:

Models:控制或呈现用户(users)处理的数据,可以是仅仅用来呈现在View和Controller之间传递数据的view model;也可以是相对复杂的包含在业务领域里面,用来执行操作,传输,处理规则的数据。

Views:作为UI,负责呈现数据给客户端,也就是最终的HTML页
Controllers:处理请求,执行对model的操作,并选择一个View来把model的数据呈现给浏览器或者说是用户。

Models是对整个应用程序所工作的环境的定义,例如在一个银行系统中,model代表了程序支持的所有一切,比如总账,客户的信用额度等等,以及可以用来操控数据的所有操作(诸如,存款和取款的操作),我们也越发知道Models对于整个mvc应用程序的重要性。

Models同样可以从它不负责的那方面来理解,比如它不负责呈现UI和处理各种请求,这些属于Views和Controllers的工作,Views除了负责展示model的成员给用户别无其他的工作,也就是说,Views是不知道Models的存在的,也不会跟Models有任何直接的联系。Controllers才是Views跟Models之间的桥梁,当有来自客户端的请求时,Controllers就会选择一个合适的View来响应用户的请求。

如果有必要,在Models里面也会实现一些必要的操作。可以说,MVC架构的每个部分都得到了很好的定义和划分,这也正是MVC一直贯彻的"分解关注点"的思想:对数据操控的逻辑都包含在Models里面;对数据的展示逻辑都包含在Views里面;处理用户请求和输入的逻辑都包含在Controllers里面。伴随着这样一个非常清晰明确的分工,我们的程序会变得更加容易维护和扩展,甚至是系统非常庞大了以后也一样。

3.理解领域模型(Domain Model)

前面也有说过,MVC里面最重要的部分就是Domain Model(至于什么是Domain Model前面的笔记有过介绍),我们根据应用程序必须支持的行业或者活动中存在的现实世界的实体,操作,以及规则把这些称为领域(Domain),在此基础上来创建Models的。创建的Model也自然可以称为Domain Model。对于用C#开发的人来说,Domain Model就是一套C#类型(类,结构等)的集合,把这些统称为领域类型(Domain Type).通过定义在领域类型里面的方法表示对领域的各种操作,并且领域的规则也表示在了这些方法里面,当我们创建了一个领域类型(Domain Type)的实例时,也就是创建了一个领域对象(Domain Object),领域模型通常是持久化的,当然持久化有很多方式,通常情况下利用关系型数据库。

为了进一步分解ASP.NET MVC应用程序的领域模型,会将model放在不同的C# assembly里面。这样我们就可以从程序的其他部分创建到领域模型(Domain Model)的引用,这对应规模较大的项目尤其有用。

4.ASP.NET的MVC实现

在MVC中,Controllers是C#类,通常继承了System.Web.Mvc.Controller类,每一个公有的方法我们称为Action Method,这些Action方法通过ASP.NET Routing System(路由系统)跟可配置的URL相关联。为了实现一些Domain Model里面的操作,Controllers里面的语句会被执行,之后选择一个View呈现到客户端。下面的图很好的展现了这样一个过程:

《Pro ASP.NET MVC 3 Framework》学习笔记之三【MVC模式介绍】
从上面的图我们也能清楚的看到,View是不依赖Controller的,也不知道Controller的存在,更加不会发生直接的联系。ASP.NET MVC3提供了一种新的View Engine--Razor,当然以前的aspx视图引擎仍然可以直接用的,在MVC里面,我们可以选择任意的方式去实现Domain Model,而不会有任何的限制。

这里也有传统的三层架构的图解过程,如下所示:

《Pro ASP.NET MVC 3 Framework》学习笔记之三【MVC模式介绍】
对比一下,我们也能体会MVC架构的一些优点吧。

传统的三层架构也是一个很大的跨越。现在被广泛的应用在了各种业务系统里面,它对应UI的如何实现没有任何限制,不管你是Winform还是Webfrom,或是其他的,都可以应用。在没有太复杂的情况下提供了对关注点的分解。当我们仔细看时,给DAL创建单元测试相对容易些。并且三层架构跟MVC看起来有非常相似的地方,但是MVC跟三层却是完全不同的东西,不要把两者混淆了。按照老赵在MSDN里面的说法(我看过几个相关的MSDN的MVC教程)MVC是一种呈现模式,而三层是一种架构模式

对应三层:当我们的UI层
耦合了按钮事件以后,会使得自动化的单元测试几乎不可能实现。

5.MVC也有很多的变体,例如:Model-View-Presenter Pattern(MVP模式),Model-View-View Model Pattern(MVVM模式)

今天的笔记先做到这里,明天继续。

我刚学MVC,对于书里面的理解肯定会有错误,请路过的大牛多多指正,谢谢

祝路过的朋友工作顺利!

上一篇:由淘宝,京东,凡客站点的多条件分页查询细节想到的


下一篇:教你用 Netty 实现一个简单的 RPC!