首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

Proxy形式的疑问,求帮助.

2012-12-24 
Proxy模式的疑问,求帮助...以Proxy模式调整之后,有效实现了职责的分离,DBManager类只关注数据操作逻辑,而

Proxy模式的疑问,求帮助...
以Proxy模式调整之后,有效实现了职责的分离,DBManager类只关注数据操作逻辑,而不用关心权限判断逻辑,在此仅为Add操作为例来说明:
  
public class DBManager:IDBAction
{
   public void Add()
   {
      //执行数据增加
   }
     //部分省略

而将权限的判断交给DBManagerProxy代理类来完成,例如:
public class DBManagerProxy:IDBAction
{
    private IDBAction dbManager;
    
    public DBManagerProxy(IDBAction dbAction)
    {
        dbManager=dbAction;
    }
    //处理权限判断的逻辑
  public string GetPermission(string id)
   {
       //处理权限判断
   }
   
    public void Add()
    {
       if(GetPermission(id)=="CanAdd")
        {
              dbManager.Add();
         }
    }
   //部分省略
}
通过代理,将数据操作和权限判断两个职责分离,而实际的数据操作由DBManager来执行,此时客户端的调用变得非常简单:
   
public class DBClient
{
    public static void Main()
    {
           IDBAction DBManager=new DBManagerProxy(new DBManager("CanAdd"));
           DBManager.Add();
     }
}


疑问: DBManagerProxy类里面不是还是有2个职责吗(2个方法)? 一个是判断权限GetPermission(),一个是Add()添加数据? 为什么说已经把这2职责分离了?
[解决办法]
DBManager只管做它的业务(也就是Add),不用操心权限的问题。
这里定义了一个DBManagerProxy来代理DBManager做业务,这个代理的一个很重要功能就是权限判断,在让DBManager做业务前,先判断有没有权限。如果不用这个代理的话,就得在DBManager里增加权限部分,这样对扩展来说就是灾难了,会影响到之前的所有用到DBManager的所有业务。
[解决办法]
如何判读一个类只有一个职能,DBManagerProxy类不是做了2件事吗? 一个是权限判断GetPermission(),一个是添加数据Add(),添加数据调用的是DBManager对象去处理。难道调用别的类去处理就不算是自己的职能吗?

热点排行