求一种合适的设计模式解决这个问题

求一种合适的设计模式解决这个问题


      
 public String onDelete(Object obj)
	{
		// TODO Auto-generated method stub
		String result="JOBTITLE_DELETE_SUCC";
		log.info("**********deleting*************");
		try
		{ 
		  Object vo=clientDataMap.get("DELETE_OBJECT");
		 
                   if(!BACKUP.equals("1"))
                   {  
                       SpringDao.delete(vo);
                   }
                   else
                   {  
		     SpringBakDao.delete(vo, new String[]{user,actionType,projectUtils.getVOId(vo)});
	           }
		}
		catch(Exception ex)
		{
			ex.printStackTrace();
			result="JOBTITLE_DELETE_FAIL";
		}
		return result;
	}

	public String onInsert(Object obj)
	{   
		String result=module+"_INSERT_SUCC";;
		try
		{ 
		  Object vo=clientDataMap.get("VO");
		  if(!BACKUP.equals("1"))
                        SpringDao.insert(vo);
		  else
			SpringBakDao.insert(vo, new String[]{"Terry",actionType});
		}
		catch(Exception ex)
		{
			ex.printStackTrace();
			result=module+"_INSERT_FAIL";
		}
		log.info("GeneralPersistBO...INSERT()...result:"+result);
		return result;
	}


这是一个进行持久化事务的类,这里有两个DAO分属于不同类型,SpringDao只往一个数据库中存数据,SpringBakDao会往备份数据库中存数据,BACKUP常量控制是哪种持久化方式,问题是,每次crud操作时,
都对BACKUP判断一次, 实在是有冗余代码,不是一个良好的设计,我想到几个方案:

1 使 SpringDao和SpringBakDao都实现一个IDAO接口,但问题是,这两个DAO的crud方法,都是需传入不同的参数个数的,如果想统一起来,可以写一个Adapter,然后实现所有接口方法,再每个Dao继承这个Adapter并重载相关的方法,但是,由于要传入的参数个数不同, 始终要判断BACKUP的值


2 用proxy或interceptor, 都存在一个难点,不同DAO的相同的crud方法的参数都不一样的,就算同一个DAO类型的crud四个方法的参数个数也不一致,例如
SpringBakDao.delete(vo,new String[]{String id}),SpringBak.insert(vo,new String[]{String id,String newId}); 如果我用proxy模式,岂不是要传入最多的参数个数入这个proxy类里面,才能应付所有情况?

两种方案都不是理想的,所以想听听大家的意见,有什么更好的模式可以解决这个问题.谢谢

你可能感兴趣的:(DAO,设计模式,AOP,数据结构,Excel)