ASP.NET的MVC设计模式

当开发者听到“设计模式”这个词时,他们通常联想到两个场景。 一组开发者正在讨论许多创造性意见,正在开会,但是却没有进行编码。另外一 组人能制定出正确的计划,保证系统能够开发成功,代码可以重用。

而现实一般都处于两者中间。在为他们的公司设计解决方案的时候,结构设计 者和系统设计者应该寻找重复的模式。但是模式只是开发健壮、可重用代码的一 个指导。结构设计者不能过多的去设计一个解决方案的结构,因为要定期交货。

过多的设计系统结构的主要受害者是Web应用程序。因为多数Web应用程序是用 来浏览数据的,它们设计的目标是数据显示的速度能跟得上数据更新的速度。在 很多情况下,建立一个复杂的、多层次的体系结构并不是为了满足用户或者开发 者的需要。让我们看看开发.NET Web应用程序的一个简单的例子:

用ASP.NET实现一个经典的设计模式

Smalltalk,最早的一种面向对象的编程语言,给开发者提供了一个快速开发 面向对象系统的平台。经典的Model, View, Controller(MVC)设计模式就是从 这个研究上发展起来的,并且现在仍在作为一个参考模型使用。Model保存由View 显示,由Controller控制的数据。View负责向用户发送输出,Controller负责反 应用户的动作并相应地更新Model。

ASP.NET提供了一个很好的实现这种经典设计模式的类似环境。开发者通过在 ASPX页面中开发用户接口来实现View。Controller功能在逻辑功能代码(code- behind)文件(Foo.aspx.vb或者Foo.aspx.cs)中实现。

在.NET中实现这种设计提供了一个两层的系统,较经典的ASP结构来说有明显 的优点。将用户显示(View)从动作(Controller)中分离出来提高了代码的重 用性。将数据(Model)从对其操作的的动作(Controller)分离出来可以让你设 计一个与后台存储数据无关的系统。

如果设计正确的话,一个基于MVC设计模式的系统将不会知道、也不会关心提 供给Model组件的数据是存储在SQL Server或是Oracle数据库中,还是存储在一组 XML文档中。

很多人会说,开发者可以使用ASP页面和COM对象很容易地实现这种模式。但是 事实是,我检查的多数系统根本没有使用COM对象,或者只是使用COM对象来访问 数据库;他们依然在ASP页面中嵌入脚本来完成商业逻辑。我并不是说MVC模式提 倡在ASP页面中不使用脚本。我只是说在ASP页面中的脚本应该只局限于用来支持 View功能和Controller功能。

性能和可扩展性

当设计一个基于这种模式的解决方案时,一定要考虑到另外两个问题。首先, 这个解决方案的性能如何,我们怎么提升其性能?第二,这个解决方案的可扩展 性和可升级性如何,什么地方值得扩展或者打破这种模式?

性能

尽管从Controller和View中访问Model将是独立于具体数据库的,但并不意味 着Model自己不能被优化。因为ADO DataSet不关心数据源,通过采用数据库专有 的优点不用打破这种模式就可以提高系统性能。例如,相比在你的逻辑功能代码 文件(Controller)中使用嵌入的SQL Select语句,我们可以使用存储过程根据 给的参数返回想要的值,这种效果会好些。存储过程不仅仅是被数据库中预编译 好的,它们还有一个预先确定的执行路径,所以其执行得更快,效率更高。

然而如果你使用存储过程来处理商业逻辑的话,你可能会打破这种模式。这些 商业逻辑本应该属于Controller的,允许多个视图使用它们。通常你会用数据库 专有的特征来优化系统性能或者强迫引用完整性,但不要用来实现Controller特 征。

可扩展性和可升级性

为了能成功地进行升级,一个MVC模式的应用程序不得不工作在Web服务器群下 。只要你设计你的应用程序为无状态的或者在View和用户间维持状态(ASP.NET缺 省为开发这种应用程序),你就能通过简单地将你的ASPX页面和逻辑功能文件复 制到一个服务器群的多个IIS服务器上,全都指向同一个数据库服务器。

当实现这种模式时,我发现将逻辑Controller层分离为两个物理层很有用。相 比在Controller层中在多个方法中复制使用同样的数据访问,我更乐意将所有的 代码合并在一个单独的数据访问对象中,由它来完成该应用程序所有的数据访问 。微软提供了一个比较大的例子,就是将数据访问应用模块全部合并到一个数据 访问层中,你可以从MSDN中下载这个例子。集中的数据访问提升了代码重用性, 但更重要的是,通过使用实际容量设置连接可以保证你的应用程序使用连接池。

以更快的速度开发更好的软件

使用设计模式能帮助你建立更可靠、更易维护的软件。当给你的客户设计系统 结构时,你首先应该考虑建立基于著名设计模式的应用程序,然后再根据需要和 性能要求来扩展这些设计模式。

时间: 2024-08-07 03:45:12

ASP.NET的MVC设计模式的相关文章

ASP.NET下MVC设计模式的实现

asp.net|设计 ASP.NET是微软最新推出的新型体系结构.NET框架的一部分,它为构造新一代动态网站和基于网络的分布式应用提供了强有力的支持.与以前的 Web 开发模型相比,ASP.NET 提供了许多重要的优点例如: 简易性:安全性:可管理性等.而且与基于过程的ASP页面技术相比,面向对象技术在ASP.NET中得到了完全实现.用传统ASP技术建立的Web应用实例中,在页面中同时实现显示,业务逻辑和流程控制,这从工程化的角度考虑,它有许多不足之处.用户界面承担着向用户显示问题模型和与用户进

MVC 设计模式带来更好的软件结构和代码重用

设计 模型-视图-控制器(MVC)是Xerox PARC在八十年代为编程语言Smalltalk-80发明的一种软件设计模式,至今已被广泛使用.最近几年被推荐为Sun公司J2EE平台的设计模式,并且受到越来越多的使用 ColdFusion 和 PHP 的开发者的欢迎.模型-视图-控制器模式是一个有用的工具箱,它有很多好处,但也有一些缺点. MVC如何工作 MVC是一个设计模式,它强制性的使应用程序的输入.处理和输出分开.使用MVC应用程序被分成三个核心部件:模型.视图.控制器.它们各自处理自己的任

理解jsp模式2架构:MVC设计模式探险

js|架构|设计 摘要:通过开发一个熟悉的基于web的购物店,你将学到如何工具化mvc设计模式并且真正地在使用jsp的时候分离内容和表现.Govind Seshadri 会向你展示这是多么的容易(2000字(原文字数)). 尽管相对抛开最近的相关介绍而言,jsp技术正在很好地以自己的方式成为卓越的创建提供动态web内容的应用程序的java技术.java开发者因为许多不同的理由喜爱jsp.一些人喜欢它给交互式web页面带来了"一次编写,到处运行"的变化这个事实:另一些人欣赏它易学易用并且

学习顺便翻译:理解jsp模式2架构——MVC设计模式探险

js|架构|设计 理解jsp模式2架构 MVC设计模式探险 摘要:通过开发一个熟悉的基于web的购物店,你将学到如何工具化mvc设计模式并且真正地在使用jsp的时候分离内容和表现.Govind Seshadri 会向你展示这是多么的容易(2000字(原文字数)). 作者:Govind Seshadri 尽管相对抛开最近的相关介绍而言,jsp技术正在很好地以自己的方式成为卓越的创建提供动态web内容的应用程序的java技术.java开发者因为许多不同的理由喜爱jsp.一些人喜欢它给交互式web页面

使用shieldUI Chart控件在ASP.NET和MVC应用程序中创建一个销售仪表板

本文中,我们将处理一个常见的数据可视化任务,即创建一个销售仪表板 (dashboard).在商业演示中经常会使用销售仪表板来展现某个商业流程或商业 目标的关键绩效指标,而完成这样一个演示的关键不仅在于对数据进行良好的可 视化展示,还要有赏心悦目的外观.为了完成这一任务,我会使用相关的图表组 件,它提供了全部的所需功能.这个示例中将使用ShieldUI中的图表组件,这一 系列产品可以从网站的免费下载. 完成后的展示请见下图: 本示例将使用ASP.NET与MVC两种方式讲解. 使用代码 ASP.NE

基于MVC设计模式的WEB应用框架研究

摘要 MVC设计模式是基于J2EE的WEB应用开发的首选模式,当前许多流行的框架也都是基于MVC设计模式的.本文简要介绍了MVC设计模式和Struts框架,并提出了一种基于MVC模式的新型WEB应用开发框架--WebFramework,并对该框架的各个层次的组成.功能进行了详细的描述. 关键词 MVC设计模式:J2EE:框架:Struts 引言 随着开源软件的兴起,各种框架也纷纷出现,如Apache 的开源框架Struts就是典型的代表.在实际软件开发中运用这些框架,大大降低了J2EE开发的复杂

通过Java Swing看透MVC设计模式

一个好的用户界面(GUI)的设计通常可以在现实世界找到相应的表现.例如,如果在您的面前摆放着一个类似于电脑键盘按键的一个简单的按钮,然而就是这么简单的一个按钮,我们就可以看出一个GUI设计的规则,它由两个主要的部分构成,一部分使得它具有了按钮应该具有的动作特性,例如可以被按下.另外一部分则负责它的表现,例如这个按钮是代表了A还是B. 看清楚这两点你就发现了一个很强大的设计方法,这种方法鼓励重用reuse,而不是重新设计redesign.你发现按钮都有相同的机理,你只要在按钮的顶上喷上不同的字母便

JSP隐式对象和MVC设计模式

 今天我们一起来了解一下关于JSP应用的JSP的隐式对像和MVC设计模式. 首先我们先来说一下JSP的隐式对象:JSP隐式对象是Web容器加载的一组类的实例.它是可以直接在JSP页面使用的对象.分为4个主要类别:1. 输入和输出对象:控制页面的输入和输出(request.response.out). 2. 作用域通信对象:检索与JSP页面的Servlet相关的信息(session.application.pageContext). 3. Servlet对象:提供有关页面环境的信息(page.co

asp.net中mvc使用ajax提交参数的匹配问题解决探讨

本文为大家介绍下使用javaScript解决asp.net中mvc使用ajax提交参数的匹配问题,遇到类似情况的朋友可以参考下,希望对大家有所帮助   想到在asp.net的mvc中如果使用ajax向服务端传递参数时如果参数是一个类或者是个数组(或List集合)以及更复杂的对象时,服务端总是会发 生取不到值的情况,当然网上也有很多解决的例子,但都是在服务端想办法来解决的(比如将json转换为字符串,再在服务端反序列化为一个对象),为何不能 在客户端就把这个问题搞定. 其实问题没那么复杂,那是因为