【发布时间】:2013-04-12 08:38:31
【问题描述】:
我在一些遗留代码中有一个静态方法,它被多个客户端调用。我显然没有选择覆盖它,或者通过依赖注入改变行为。我不允许修改现有的类。
我现在要做的是使用反射来改变行为(该方法 - 具有相同的签名和返回类型)。
有可能吗?如果没有,任何设计模式都可以救我吗?
谢谢!
编辑:我可以更改/修改什么有些混乱。我无法更改任何现有的类/方法 - 但我可以向项目添加更多类。我能对现有类做的最好的事情就是注释它们。这样做是为了避免破坏现有代码中的任何内容——这意味着对一个大项目进行完整的一轮测试。
编辑 2:java.lang.Instrumentation 不适用于 Android - 否则听起来很合适!
【问题讨论】:
-
不允许修改,但允许通过反射修改?这似乎风险更大。
-
我认为这将成为一场维护噩梦。代码将撒在任何阅读它的人身上。去获得批准以更改该课程。
-
@SpaceTrucker :我知道这很棘手——我们有机制来提醒未来的团队。这就是我获得批准的原因。
-
AOP,面向方面的编程可以做到这一点,包装它的调用。
-
在任何情况下您的行为都会发生变化,这需要进行测试。所以测试工作总是一样的。唯一的问题是您如何实施该更改。
标签: java android design-patterns legacy-code