日期:2014-05-19  浏览次数:20594 次

如何覆盖 依赖项目 中的一个类?
最近开发中遇到如下一个问题:
  A项目底层依赖公司自己开发的持久化框架ORM,因为特殊的业务需求需要改写ORM中xml的解析逻辑,故需要改动ORM中XMLBuilder这个类的实现逻辑,在ORM里直接改固然容易,但问题是公司现有很多其他上层项目(如B,C,D,E...)都依赖于ORM,觉得将A特殊需求改写到底层ORM框架,可能影响上层其他已有项目的稳定性。
  现在明确要将这一特许需求放在A自己项目内,那我改写NewXMLBuilder这个类该怎么起效?
  方案1:继承ORM中的XMLBuilder类,然后递归继承这个类的关联类...个人觉得这个办法好蠢...
  方案2:模拟出ORM中XMLBuilder类的包路径,放同名文件在里面,但是里面实现了新的业务处理逻辑。

现在可接受的办法就是2了,但是看着项目里多了一道毫不相关的包路径,感觉很突兀,心里有点难受,故来寻求大家帮助。

------解决方案--------------------
方案2:模拟出ORM中XMLBuilder类的包路径,放同名文件在里面,但是里面实现了新的业务处理逻辑。

这个可行
------解决方案--------------------
如果你的XMLBuilder在包外可以继承,那么只继承这一个类,复写关键的方法就行,不用递归集成关联类。如果需要用到XMLBuilder同包里的类,那可以考虑把你的继承类放到同一个包下。

或者考虑使用动态代理,或者用spring这类AOP框架来拦截所关心的方法,替换敏感方法的逻辑行为。
------解决方案--------------------
通过AOP的方式可能能够松耦合。
------解决方案--------------------
探讨

通过AOP的方式可能能够松耦合。