如何看待开闭原则(OCP)? 有些人不认同OCP,他们认为我们应该专注于编写简单的代码。 我同意这一点,但是我没有看到简单性和OCP是如何不兼容的。
有两个初步要点:
- OCP的目标不是编写我们再也不会修改的关闭代码,否则将导致过度设计和前端大设计(BDUF)。 我们将用无用的抽象来填充代码,以解决不存在的问题。
- 完全遵守OCP是不可能的。 无法通过添加新代码而不修改现有代码来满足用户要求的任何可能的更改。 我们无法预见用户将要求的每一项变更。
我们将知道用户所需的更改,并且我们将能够创建使这些更改的应用变得更加容易的抽象。编写简单的代码,重构和添加抽象,因为它们被证明是必要的。注意YANGNI原则。
下面是您遵守OCP的方式:
- 在实际用户需求的驱动下,OCP从重构中浮现出来。
- OCP并非来自BDUF设计人员的预期行为。
- 抽象化:将抽象与底层细节分开;
- 将变化与保持不变分开。
banq注:当需求改变或增加时,有两种直觉:需求改变,就要修改原有代码;需求新增加功能,就要新增代码:
需求有两种变化:新增和修改。
代码有两种变化:新增和修改。
这两种不一定要一一对应,而是根据简单原则和OCP原则去选择代码的新增或修改来满足需求的新增,使用代码的新增或修改来满足需求的修改。
简单原则是当下工作的简单,OCP原则是为了让代码结构简单。这两者都需要考虑。

编程第一法则:如果它运行,就不要触碰它(修改)。OCP原则可以避免你触碰能工作的代码,虽然这些代码运行得很奇特。