用Adapter模式重构以前系统的登录权限验证

Adapter模式概述

Adapter模式有两种形式,一种是类的形式,一种则是对象的形式。目标就是用Adapter将原本不兼容的几个接口可以一起工作,简单的说,就是将引用的东西转变成我们自己系统需要的接口类型。下面是两种类型Apdapter的图(这两张图都拿自吕老师那里):

Pic58 Pic57

Adapter模式很好的诠释了“依赖倒置”原则,从图中可以看出cilent不是再去依赖Adaptee,而是依赖Target。关于Adapter模式的东西就不再多说了,你看以在这里这里看到吕老师跟TerryLee两位大牛的精彩文章。

重构的源来

我们的系统常常到各个地方去部署,而各个客户商一般都有了自己的权限平台。而客户并不想他们因为有多个系统而需要多次登陆,多次权限分配。所以一般是我们调用他们的webservice去实现用户认证跟权限的获取。而各个地方的权限平台大都是不同的,在以前每次部署一个地方就要改下以前的权限获取跟用户认证部分,这毕竟是让人头疼的事。

用Adapter模式来重构

后来经过几次考虑还是决定用adapter模式来重构下,毕竟欠的帐总是要还的,虽然当初这个帐不是我欠的,但是这个帐已经落到我头上来了,就不能坐着不管了,呵呵。其实我们系统考虑的Target就只是两个东西,一个是用户的认证,一个是权限的获取。考虑当初我们的系统中的用户类CloUser中已经存在了PowerList这样的属性,所以我们需要管的就是我给一个用户名、跟密码返回一个我们一个CloUser就行了,同时考虑到每次个Adapter可能需要实现别人的权限表示到我们权限表示的转换,设计出下面的图:

image

 

我更加喜欢使用类类型的Adapter模式,因为这似乎更加符合“开发封闭原则”。

实现代码

这里给出实习DefaultLoginAdapter(我们自己系统)的代码,毕竟实现其他的也是一样子的。

LoginTarget:

 

 

interface  ILoginTarget
   {
        
string  ChangeRightFormart( string  rightTarget);

        ClOUser CheckUser(
string  strUserName,  string  strUserPsw);
    }

 

DefaultAdapter:

 

 

public   class  DefaultLoginAdapter : CtlUserRegister, ILoginTarget
    {
        
///   <summary>
        
///  转换权限表示形式
        
///   </summary>
        
///   <param name="rightTarget"></param>
        
///   <returns></returns>
         public   string  ChangeRightFormart( string  rightTarget)
        {
            
return  rightTarget;
        }

        
///   <summary>
        
///  根据用户名、密码返回一个用户,没有则返回null
        
///   </summary>
        
///   <param name="strUserName"></param>
        
///   <param name="strUserPsw"></param>
        
///   <returns></returns>
         public  PDMSLib.Entity.ClOUser CheckUser( string  strUserName,  string  strUserPsw)
        {
            ClOUser user 
=   new  ClOUser();
            user 
=    this .ReturnUser(strUserName);
            
if  (user  ==   null return   null ;
            
if  ( ! strUserPsw.Equals(user.USER_PWD))  return   null ;
            
return  user;
        }
    }

 

实现其他的Adapter也是一样的,这里的ChangeRightFormart因为是本身,所以不需要转换,直接返回就可以。这样再次到其他地方部署的时候,我们只需要去添加一个Adapter来实现Target就可以了。如果合理的划分程序,也许我们就只要重新更新Adapter的dll就可以,以及修改一些配置就可以轻松实现权限判断,而不需要每次再去看Client里面的逻辑了。这只是我的想法,希望大家能给出更多好的想法。

 

作者:Henllyee Cui
出处: http://henllyee.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明。

转载于:https://www.cnblogs.com/Henllyee/archive/2009/03/08/1406477.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值