位置:海鸟网 > IT > ASP.NET >

Provider Model 模式

     这篇文章的思想的来源是Rob Howard半月前的一篇文章,《Provider Model Design Pattern and Specification, Part 1》,本来想等Rob H把Part II写完然后再一起总结一下的,可等啊等啊,估计这位哥们儿在忙着准备DevDay2004和做演讲,所以一直都没有等到Part II出来。不过Rob Howard在MSDN上的文章从来都是精品,而且这篇文章之前很长一段时间,由于忙着Whidbey的开发,Rob H已经很久时间没有在MSDN上的专栏撰写文章了,所以这篇文章出来的时候甚至被MS的人士称为“Return of the King”,呵呵。
  
  
  
  言归正传。所谓Provider Modal,基本上都是指的“DataSource Provider Modal”。它是一种让你能够方便的提供多种数据源,并可以“动态”的在各个数据源间进行切换的一种模式。
  
  
  
  在ASP.NET 2.0中,大量采用了Provider Modal模式。比如,Personalization和Membership是ASP.NET提供的内置的能够给开发人员极大方便的特性,它们能够自动保存用户的个性化信息,和维护站点用户信息。它们都需要一种存储方式,就是说,需要找一个数据源来保存他们的数据。但是这个数据源的提供方式,需要有非常大的灵活性、伸缩性、可定制性。比如,我的服务器可能没有安装SqlServer,只安装了MySql,但是我希望不管我的实际的数据库是什么类型(或者根本就没有条件安装大型数据库,而只能提供Access的方式进行保存),都能够作为Personalization和Membership所能使用的数据源,都能保存它们需要保存的数据。
  
  
  
  这个时候,Provider Modal模式就可以大展身手了。首先,MemberShip对于能够保存它的数据的Data Provider提出一个要求,比如必须实现IMembershipProvider接口,而这个接口里面定义了保存MemberShip系统中的数据所需要实现的所有方法,比如“CreateUser(String username, String password, String email, out MembershipCreateStatus status)”用来创建新用户,“Boolean ChangePassoword(String name, String oldpassword, String newpassword)”用来修改用户密码。我们要做的,就是针对MySql写一个MySqlMembershipProvider,实现IMembershipProvider要我们实现的所有接口,然后在web.config文件将我们写的这个MySqlMembershipProvider指定给MemberShip用。而对于MemberShip系统来说,它不用关心倒是是谁实现了IMembershipProvider,它只是根据web.config里面的设置,载入那个具体的实现IMembershipProvider的对象,然后调用IMembershipProvider定义的接口方法就可以了。这样我们就拥有了极大的灵活性,可以根据自己的要求定制满足自己需要的Data Provider。
  
  
  
  上面所说的,就是Provider Modal模式了。在很多的场合,在我们需要一个很大的灵活性的数据存储方式多样化的场合,我们可以应用这个模式,让我们的系统变得灵活而具有可扩展性。能够想到的包括Log纪录、Cache保存、用户State状态保存等等,只要我们开始做的时候就明智的应用Provider Modal模式,那么也就给了以后扩展的机会。
  
  
  
  好像很简单,呵呵,但是掌握更多的实现规范才能更好的实现它。更多的细节和实现规则,请参看Rob Howard的文章。上面ASP.NET 2.0 Personalization和Membership特性,来自《A First Look At ASP.NET 2.0》。
  
  
  
  现在就可以得到的Provider Modal的极佳范例,ASP.NET Forum 2.0,现在仍处于Alpha阶段,预计月底发布Beta和Final版本。