ASP.NET提供程序模型

在ASP.NET提供程序模型的背后有一个著名的设计模式——战略(strategy)模式。根据定义,战略模式指一种可以通过各种可互换的算法(比如Quicksort和Mergesort)实现的预期行为(比如“排序”)。然后,在保持公开的、可观察的行为和编程API不变的同时,每个应用程序选择最适合的算法。

战略模式最突出的特征是,它为对象或整个子系统提供了一种向外提供自己内部构件的方法,使客户可以去掉一个给定特征的默认实现并插入自己的实现。ASP.NET中的许多服务正是这样的,包括成员资格、角色、状态管理、个性化和站点导航。ASP.NET提供程序模型是ASP.NET对战略模式的实现。

1.4.1  提供程序模型的基本原理

提供程序模型不是最终用户能够亲眼所见的应用程序特征。提供程序模型本身并不会使一个应用程序展示出更丰富的内容、运行得更快或者更迅速地做出响应。提供程序模型是一个基础特征,能使开发者和设计师在理解某些系统组件的前提下进行工作,从而改进一个应用程序的构架。同时,它使开发者能够构造新组件,向外提供工具,使客户能够插入和定制行为和设置。实施战略模式并不是指把一个应用转化为一个开源项目,允许任何人修改任何东西。而是指我们有一个简单的、优雅的和有效的模式,使客户可以对应用程序的某些部件进行定制。但是,ASP.NET对战略模式的实现,即提供程序模型,使我们能够通过称为提供程序的特殊的类(可由此派生出自己的类)对ASP.NET运行时环境的某些部件进行定制。

1. 提供程序模型实例

为了观察提供程序模型的实例及其主要好处,让我们来看图1.6。该图概括了用户身份验证的经典模式。该图中的各方框严格遵循ASP.NET 1.1中的操作流。

 

向企图连到一个受保护页面的用户显示一个注册页面,要求他输入身份。接着,姓名和密码被传递给一个函数,该函数最终负责确认该用户。ASP.NET 1.x可以根据Windows账户或web.config文件中的姓名列表自动地核实用户。在实际的Web应用中,这些方法没有一个会行之有效;在大多数情况下,开发者不得不编写一段定制代码,根据一个自制的数据源来确认身份。该数据源的模式和存储介质是固定的,并且由开发者决定。同样,用来确认身份的算法受到设计的限制。

这种解决方案有问题吗?未必。它可以很好地起作用,使你能够控制一切,并且能够适宜在其他应用中工作。问题难就难在不能从这种解决方案获得良好定义的模式。当然,你可以把它从一个应用程序移植到下一个应用程序,但是总的说来,该解决方案与适配器的关系更像是剪切和粘贴与面向对象继承的关系。

让我们简单考虑另一种场景——会话状态管理。在ASP.NET 1.x中,会话状态可以存储在一个与正在运行的应用相分离的进程中——而不管正在运行的应用是SQL Server还是Windows服务(ASP.NET状态服务器)。然而,如果这样存储会话状态,则只能使用ASP.NET为你硬编码的数据模式。进一步设想一下,假设你不是一个SQL Server客户。在这种情况下,要么放弃把会话状态存储到一个数据库中的想法,要么购买一组SQL Server许可。最后,你不能对ASP.NET会话模块的内部行为进行任何处理。即使不喜欢它把数据串行输出到进程外的存储器中,也不能改变它。要么接受它,要么放弃它——没有其他选择。

你能看出ASP.NET的宏伟蓝图吗?ASP.NET中有些模块迫使你采取(或放弃)固定的数据模式、固定的存储介质和固定的内部行为。你能做的最多是(有时)不使用那些模块,而从头开始编写自己的模块,如我们在成员资格模块中所描述的那样。然而,编写自己的替代模块未必就是明智之举。你最后得到的是一个与应用相关的专用系统,不能自动地从一个应用程序移植到另一个应用程序。此外,如果聘请新成员,还必须进行培训,使他们习惯使用你自己编写的API。最后,你不得不投入大量精力使这种专用API具有通用性,以便在各种环境中进行重用和扩展。(否则,你不得不三番五次地重头做起。)

 

从哪些方式能够看出提供程序模型是一种更好的解决方案呢?首先,它提供了一个文档完好的通用编程接口来执行通用任务。此外,你能够完全控制它的每个API的内部事务和数据访问逻辑。

最后,在ASP.NET 1.1中,除了编写自己的API以自己喜欢的方式提供某些功能外,通常别无他选。在ASP.NET 2.0中,提供程序模型提供了一个更好的替代方案。这种方案相当出色,不使用它简直是一种罪过。

图1.7从提供程序模型的观点再现了图1.6。ASP.NET 2.0在一个全局类(Membership)中提供了大量静态方法。(第15章将详细介绍成员资格API)。在应用级,总是调用相同的方法来执行相同的操作(例如,确认用户身份,创建新用户,修改密码)。然而,在这个通用API下,可以插入自己的提供程序,完全以自己希望的方式执行该作业。编写一个新的提供程序犹如从一个已知的基类派生一个新类并覆盖几个熟悉的方法那么简单。在配置文件中为指定任务选择当前提供程序。

(未完)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值