Helper or Interface

以VCD租借为例,新业务需求是在每次出租及收回VCD的时候,把相关的业务信息的变动记录下来以便于跟踪。例如,出租一次VCD的时候,就增加一条记录以保存本次的交易情况。从出租到归还VCD整个业务完成的时候,就有相关的记录可以追溯整个交易历史。

这里有两个model, VCD和Trail,两者在系统中都已经有了,现在的关键是如何让VCD转化成Trail。初始的版本比较糟糕,在TrailManager中直接写个新方法,以VCD为参数,功能就是把VCD转成Trail然后调用Dao持久化。代码的问题是显而易见的,我就不多说了。重构--把TrailManager中新加的方法去掉,VCD转成Trail的代码移到VCDManager的rent方法中。问题又出来了,renew(续借)和return(归还)也要被跟踪,于是,model转换的代码到处都是。再重构的时候就发生了争论,争论的双方都同意要消除重复的代码,差别在于,一种观点是把model转换的代码抽出来放在VCDHelper中,只需要写一次就够了。只一种观点则认为跟踪属于VCD的附加功能,从Trail抽出一个接口,让VCD也实现它,这样更简单。

基于现在的代码,两种方式都很好,而且我也看不出哪种方式有明显的优势。如果你认为AOP也许会是更好的解决方案,那么我必须说这里用AOP太大材小用。

你有什么高见?

你可能感兴趣的:(DAO,AOP)