【发布时间】:2010-11-27 20:07:15
【问题描述】:
这个问题不是关于 OCP 是什么。而且我也不是在寻找简单的答案。
所以,这就是我问这个的原因。 OCP 在 80 年代后期首次被描述。它反映了当时的思想和背景。令人担忧的是,在代码已经测试并投入生产之后,更改源代码以添加或修改功能最终会带来太大的风险和成本。所以想法是尽可能避免更改现有的源文件,只以子类(扩展)的形式添加到代码库中。
我可能错了,但我的印象是基于网络的版本控制系统(VCS)当时并没有被广泛使用。关键是 VCS 对于管理源代码更改至关重要。
重构的想法是最近才出现的。支持自动化重构操作的复杂 IDE 在当时肯定是不存在的。即使在今天,许多开发人员也没有使用可用的最佳重构工具。这里的重点是,这些现代工具允许开发人员在几秒钟内安全地更改数千行代码。
最后,今天自动化开发人员测试(单元/集成测试)的想法很普遍。有许多免费和复杂的工具支持它。但是,如果我们从不/很少更改现有代码,那么创建和维护一个大型自动化测试套件有什么好处呢?按照 OCP 的要求,新代码只需要新的测试。
那么,OCP 在今天真的有意义吗?我不这么认为。相反,如果新功能不需要新类,我确实更愿意在添加新功能时更改现有代码。这样做将使代码库更简单、更小,并且更容易阅读和理解。破坏先前功能的风险将通过 VCS、重构工具和自动化测试套件进行管理。
【问题讨论】:
-
导致此问题的冗长评论线程:stackoverflow.com/questions/1379230/…
-
看起来你只是在寻找一个论据,而且你已经下定决心了。
-
您提出了一个问题,但您自己回答的方式甚至不鼓励辩论。这可能应该作为“不是一个真正的问题”而关闭,如果不是这样,那么肯定会成为社区维基。
-
这是个好问题。他是说他对 ZOCP 的印象主要是因为更改生产代码很危险——问题是这是否属实。
-
这个问题被关闭是难以置信的愚蠢。另一个 StackOverflow 失败。