Provider模式

       在.NET成员资格中,当我们自定义实现提供程序的时候MSDN提醒我们要注意两点。一.需要继承 MembershipProvider类,二.需要实现Initialize方法。

       需要继承自MembershipProvider的原因在前面一篇博文有提到。大致是这样的,由于我们通常是将站点的用户信息存放在,因此Membership对用户的操作就需要对数据库进行操作,而Membership相当于BLL层并没有对数据库进行直接操作。.NET会给我提供一个SqlMemberShipProvider,这个类相当于对用户相关逻辑进行SQL数据库操作的DAL,而且是用ADO.NET。当我们用Oracle作为数据库,或者用企业库来进行数据库访问的时候。这个类不能用了,在我们之前的三层架构下,DAL层于特定数据库的解耦我们是通过抽象工厂模式的,这里也不列外。MembershipProvider就是抽象工厂模式里的那个基类。我们可以继承它,重写它的方法,来实现我们的自定义MembershipProvider

       关于第二点,首先要知道下策略模式。策略模式是面向接口编程的一个体现,其思路就是,将对象中的可变行为分离出来进行封装。在一组相似的对象中,对象将的不同只是某个行为时,通常可以将这个行为分离出来,进行分装,这样可以在调用处进行解耦。

       代码:

              (代码是张逸老师书籍的代码,157页)

代码
public interface ITaxStrategy

{

double Calculate(double income);

}

public class PersonalTaxStrategy

{

double Calculate(double income)

{

//TODO:计算个税

}

}

public class EnterpriseTaxStrategy

{

double Calculate(double income)

{

//TODO:计算企业税收

}

}

public class TaxManager

{

private ITaxStrategry _strategy;

public TaxManager(ITaxManager strategy)

{

_strategy
=strategy;

}

public double GetTax(double income)

{

return _strategy.Calculate(income);

//在这里实现了于具体计算税收方式弱依赖

}

}

      这上面实现的是用接口来封装具体行为的变化,然后一组相似的类来实现这个接口。而微软的Provider模式是将初始化行为写在virtual函数里面。其中基类是ProviderBase,继承自ProviderBase的类都可以想开发人员提供.NET默认实现的方法,开发人员也可以自己定制实现这些提供程序。由于这些类的初始化时所需要用到的信息不通,因此ProviderBase将其声明为virtual方法,而类型与MembershipProvider这样的类继承自ProviderBase,但是它并没有实现Initialize这个函数。从上面知道,MembershipProvider是抽象工厂的基类,也就决定了它没必要实现Initialize这个函数。

      这就是MSDN上两点的原因,也是Provider模式的一个大概了解。

  

  

  

posted @ 2010-12-28 22:50  雁北飞  阅读(710)  评论(0编辑  收藏  举报