我读了这本书Working effectivly with Legacy code。
我了解打破旧代码中的依赖关系的技术
但我想第一次了解如何避免这些依赖:
1-关于静态方法:
我明白Introduce Instance Delegator
但这是否意味着我们应该完全避免使用静态方法?
(当它不仅仅是一段代码的宏时。
意味着它有一些真实的逻辑并且它与实例无关?)
2- 全局变量
我明白Introduce Static Setter,
但又一次——我们应该完全避免辛格尔顿吗?
我读了这本书Working effectivly with Legacy code。
我了解打破旧代码中的依赖关系的技术
但我想第一次了解如何避免这些依赖:
1-关于静态方法:
我明白Introduce Instance Delegator
但这是否意味着我们应该完全避免使用静态方法?
(当它不仅仅是一段代码的宏时。
意味着它有一些真实的逻辑并且它与实例无关?)
2- 全局变量
我明白Introduce Static Setter,
但又一次——我们应该完全避免辛格尔顿吗?
传统上,单元测试领域对静态方法的批评是难以模拟它们。我从来不同意将其作为避免使用静态方法的理由(并且预料到那些不同意的人,并不是每个人都有使用 IOC 容器的奢侈)。
有一些工具可以模拟静态类,例如JustMock。
模拟单例的另一种更肮脏的方法是让单例返回一个接口并在单元测试期间使用私有访问器或直接反射模拟出单例上的实例。