ASP.NET2.0 Provider模型(二)

本系列文章介绍了ASP.NET2.0的Provider模型,本文是第二部分,原文请参考如下链接:
http://www.dotnetbips.com/articles/displayarticle.aspx?id=493

   在第一部分,我们学习了
ASP.NET Provider模型的基本概念,本文将概述ASP.NET内置Provider模型的框架结构。具体的说我们将讨论MembershipProvider模型

 

membership Provider的基础类

 
先看一下下面这张图





     正如您所看到的,所有
Provider模型的基础类都是ProviderBaseProviderBase类驻留在system.configuration.dll 集里的System.Configuration.Provider命名空间里,该类被标记为abstract,它能够作为模板提供给继承者使用。该类的一个重要的方法是Initalize()。该方法通常用来从配置文件web.config里读取配置的信息并初始化Provider模型

 

    MembershipProvider类驻留在System.Web.Security命名空间里,该类是由ProviderBase类继承而来的,并增加了成员关系所需要的特性方法和属性(这些方法和属性是建立和管理用户专用的),该类同样被标记为abstract。


  最后,
SqlMembership类驻留在System.Web.Security 命名空间,它是从MembershipProvider类派生。这是一个具体的类,它可以执行从ProviderBaseMembershipProvider定义的专门用于执行SQL Server数据库的属性和方法。


其它的
Provider

   类似的类继承关系可以在诸如SQL RoleSQL Profile Provider模型里看到。例如SQL Role Provider继承模型的链接链如下:

ProviderBase-->RoleProvider-->SqlRoleProvider

 

SQL Profile Provider的继承模型链接链如下:

ProviderBase -> SettingsProvider -> ProfileProvider -> SqlProfileProvider

 

是选择抽象类还是选择接口

    ASP.NET2.0你可以看到微软在设计指导方针的变更。在.NET2.0以前的版本里,他们通常更多的依赖接口来为框架的类提供模板模型,例如ADO.NET1.X里的数据Provider类就是执行了常规的共通接口(IDbConnection,IDbCommand等)。尽管ADO.NET2.0继续支持这些接口,但是这可能是为了兼容的原因。 

   在
ADO.NET2.0里,他们更喜欢选择抽象类。Provider就是使用了抽象类。 不是利用接口生成的模板而是选择抽象类,可能的原因我感觉是:

 抽象类可以执行某些功能而接口则不能

 接口定义后将不便于更改,因为变更将破坏从该接口定义的类的。

 使用抽象类,基类可以不干扰子类

 

  总结:文本深入介绍了ASP.NET Provider模型,在本系列的下一部分,我们将使用第一,二部分的知识来自定义自己的Membership模型

 

 

 

posted @ 2006-05-06 15:47  启明星工作室  阅读(2376)  评论(0编辑  收藏  举报