《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呈现到客户端。下面的图很好的展现了这样一个过程:


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

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


对比一下,我们也能体会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,对于书里面的理解肯定会有错误,请路过的大牛多多指正,谢谢

祝路过的朋友工作顺利!

本文转自Rt-张雪飞博客园博客,原文链接http://www.cnblogs.com/mszhangxuefei/archive/2011/12/03/mvcnotes_3.html如需转载请自行联系原作者


张雪飞

相关文章
|
3月前
|
数据库 开发者
.NET 异步编程之谜:async/await 模式究竟隐藏着怎样的神奇力量?
【8月更文挑战第28天】在当今注重效率和响应性的软件开发领域,.NET 的 async/await 模式如同得力助手,简化异步代码编写,使代码更易理解和维护。通过后台执行耗时操作,如网络请求和数据库查询,避免阻塞主线程,显著提升系统响应性。此模式不仅适用于网络请求,还广泛应用于数据库操作和文件读写。合理使用 async/await 可大幅优化性能,但需注意避免过度使用、正确处理调用链及异常,以确保系统稳定性和高效性。深入探索 async/await,助您构建更出色的应用程序。
49 0
|
25天前
|
网络协议 大数据 网络架构
桥接模式和NET模式的区别
桥接模式和NET模式的区别
31 0
|
2月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
38 7
|
3月前
|
敏捷开发 设计模式 开发者
【揭秘终极利器】AgileEAS.NET:服务定位器模式的魔法,如何让企业级软件开发瞬间提速?揭秘背后的技术奥秘与实战指南!
【8月更文挑战第16天】AgileEAS.NET是基于DotNet的企业级敏捷开发平台,其服务定位器模式助力构建高度解耦系统。通过全局服务目录动态查找服务,避免硬编码依赖。在AgileEAS.NET中,服务定位器以静态类形式封装服务注册与检索功能。示例展示了如何注册与获取服务实例,如在`UserController`中通过服务定位器使用`IUserService`。此模式整合到框架生命周期管理,便于各处获取服务实例,提升开发效率。然而,应适度使用并考虑依赖注入容器以增强代码可维护性和可测试性。
69 4
|
2月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
54 0
|
3月前
|
开发框架 监控 .NET
|
3月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
46 0
|
3月前
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?
|
3月前
|
开发框架 .NET
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
120 0
|
5月前
|
设计模式 存储 编译器
【.NET Core】异步编程模式
【.NET Core】异步编程模式
42 2