我最近正在阅读一个有关干净代码开发的网站(我不在此处放置链接,因为它不是英语)。
本网站宣传的原则之一是开放式封闭原则:每个软件组件都应开放以进行扩展,而封闭则可以进行修改。例如,当我们实现并测试了一个类时,我们仅应对其进行修改以修复错误或添加新功能(例如,不影响现有方法的新方法)。现有功能和实现不应更改。
我通常通过定义接口I
和相应的实现类来应用此原理A
。当类A
变得稳定(实现并经过测试)后,我通常不会对其进行过多修改(可能根本没有修改),即
- 如果新的要求到达需要的代码大的变化(如性能,还是一个全新的接口的实现),我写了一个新的实现
B
,并使用保持A
,只要B
还没有成熟。当B
成熟时,所需要做的就是更改I
实例化方式。 - 如果新的要求也建议更改接口,那么我将定义一个新的接口
I'
和一个新的实现A'
。所以I
,A
被冻结并保持实施生产系统,只要I'
和A'
不够稳定,以取代他们。
因此,鉴于这些观察,令我感到惊讶的是该网页随后建议使用复杂的重构,“……因为不可能直接以其最终形式编写代码。”
在执行“开放/封闭原则”与建议使用复杂重构作为最佳实践之间是否存在矛盾/冲突?还是这里的想法是,在开发一个类的过程中可以使用复杂的重构A
,但是当成功测试了该类后,应该冻结它吗?