Provider模式

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

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

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

       代码:

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

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
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模式的一个大概了解。

  

  

  

转载于:https://www.cnblogs.com/wuxiaoqian726/articles/1919196.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值