欲穷千里目 更上一层楼 海内存知己 天涯若比邻
以MVC#框架重构ASP.NET MVC Store示例网站(模型层设计)
上一篇 /
下一篇 2008-07-08 20:00:02
/ 个人分类:ASP.NET MVC
朱先忠 编译
(原文URL:
http://aspalliance.com/1651_Reworking_ASPNET_MVC_Store_with_MVC_Framework)
【摘要】在本文中,我们将介绍如何使用MVC#框架来改造一个现有的由Scott Guthrie编写的ASP.NET MVC应用程序。在介绍的过程中,我们主要立足于对比使用MVC#和ASP.NET MVC两种框架开发Web应用程序所各自经历的各个阶段的相同与区别之处。
一. 简介
前不久,微软新研发了一种称为ASP.NET
MVC的模型-视图-控制器框架。它遵循基本的MVC模式并提供了一组构建良构的可测试的三层应用程序的工具集。然而,MVC并不仅仅是一个构造三层应用程序的结构化方案。与之形成对比的是,还存在另一个为众人周知的开发方案,称为模型-视图-描述模式(简称为“MVP”)。其实,MVP模式是在MVC方案出现大约10年以后才出现的。其设计目的是为了改进传统的MVC框架,达到消除MVC框架所既存缺陷并进而予以改进之目的。事实上,MVP也的确存在较之于MVC方案不少的优越之处,以致于许多人都优先考虑选择MVP而不是MVC框架来开发Web应用程序。
在本文中,我们将探讨.NET平台下的一个新的称为MVC#(http://www.mvcsharp.org/)的MVP框架。为了方便起见,本文直接基于Scott Guthrie编写的ASP.NET MVC示例应用程序(原工程参考地址为
http://weblogs.asp.net/scottgu/archive/2007/11/13/asp-net-mvc-framework-part-1.aspx)。但是,我们在此想使用MVC#框架来重新实现这个工程,从而展示MVC#(以及所有MVP模式)优越于ASP.NET MVC框架的地方。
【提示】强烈建议读者结合Scott
Guthrie的博客中文版URL:
http://blog.joycode.com/scottgu/archive/2007/11/14/111385.aspx
http://blog.joycode.com/scottgu/archive/2007/12/04/112249.aspx
http://blog.joycode.com/scottgu/archive/2007/12/07/112355.aspx
http://blog.joycode.com/scottgu/archive/2007/12/10/112465.aspx
处的中文示例进行对比学习与研究。
二. Scott
Guthrie的ASP.NET MVC Store示例网站功能简介
我们要重构的这个ASP.NET
MVC应用程序包括若干视图。在本文中,我们主要讨论四个视图,它们分别是:欢迎视图、产品种类视图、产品视图(用于列出相应于某个特定产品种类的产品的详细信息),以及产品编辑视图。
当一名用户点击产品种类列表下的某一种类时,他将被导航到此种类相应的产品视图。如果他在产品视图中点击一种产品处对应的“Edit”命令,那么此产品对应的“编辑产品”视图将被打开。最后,用户就可以在产品修改视图中修改产品细节,并且可以通过点击“保存”按钮提交所作的修改结果。图1展示了这个示例网站运行过程中几个主要的界面。

图1—Scott Guthrie的ASP.NET MVC Store示例网站主要界面
三. 模型层设计
模型是每一个应用程序的核心。它包含了应用程序的其他部分所依赖的应用程序域的定义。这也正是设计应用程序为什么经常从构造模型开始。
至于实现模型层的方法,有多种方式。开发者可以使用常规的.NET 2.0数据集,或更时髦的面向对象的Linq+实体框架工具集,或者是使用例如NHibernate或CapableObjects ECO等第三方工具。无论如何,ASP.NET MVC与MVC#框架都无法限制开发者选择实现模型层的技术。
在本文示例中,我们的模型将包括三个域概念:Categories,Suppliers和Products。这些概念间的关系非常简单:每一个产品隶属于某一种产品类别和一个产品供应商。为了最大限度地扩展程序,我们将使用类型化数据集来实现模型层。因此,我们的模型在Visual Studio数据集设计器中将看上去如图2所示。

图2—使用Visual
Studio数据集设计器构建数据模型及其关联关系
为了使用一种一致的方式来访问模型对象,我们还使用Singleton模式来设计数据集类。于是,我们可以很容易地通过NorthwindDataSet实例对象来实现对于域对象的访问。
导入论坛
引用链接
收藏
分享给好友
推荐到圈子
管理
举报
TAG:
mvc