OCP(开放封闭原则)与 IoC(控制反转)有啥关系?

Posted

技术标签:

【中文标题】OCP(开放封闭原则)与 IoC(控制反转)有啥关系?【英文标题】:How is OCP (Open closed principle) related to IoC (Inversion of Control)?OCP(开放封闭原则)与 IoC(控制反转)有什么关系? 【发布时间】:2019-08-19 11:32:58 【问题描述】:

我能想到的一个例子是模板模式,它​​是一种做 IoC 的方式,也是 OCP 的一个例子。因为在模板模式中 我们定义了不能被子类更改但可以覆盖该算法继承的步骤方法的基本算法。所以将来如果我们 想要更改一个步骤的实现,我们可以创建另一个子类并实现这些步骤。

还有其他例子吗?

【问题讨论】:

我认为你在正确的轨道上。考虑其他 IoC 模式以及它们是否可能全部出于您所描述的相同原因促进 OCP。例如,依赖注入怎么样? OCP 和 DIP 的标签 wiki 中给出了一些历史背景。 【参考方案1】:

开闭原则建议你应该更喜欢具有可扩展行为的东西,这样当你需要它们做新的事情时,你就不必修改它们的源代码。

如果你做得对,控制反转同时也是提供这种可扩展性的最简单、最强大的方法。

这是最简单的方式,因为当您为 IoC 定义可注入接口时,您只捕获您的需求。配置可扩展行为的其他方法需要您考虑消费者可能想要的一切。

这是最强大的方式,因为代码可以做任何事情,并且提供 IoC 扩展点可以让消费者做各种你没有想到的事情,只要他们满足定义的要求通过您的界面。这也是因为注入的接口只满足您自己的需求。

因此,OCP 和 IoC 的关系非常简单:OCP 是一个目标,而 IoC 是实现它的手段。

【讨论】:

以上是关于OCP(开放封闭原则)与 IoC(控制反转)有啥关系?的主要内容,如果未能解决你的问题,请参考以下文章

添加新字段(和/或方法)是不是会破坏 OCP(开放封闭原则)?

ISP和OCP有啥区别?

开放封闭原则 Open-Closed Principle(OCP)

Python 进阶 — OOP 设计原则

6.3 SAP ABAP 开放封闭原则(OCP)- 摘自 《SAP ABAP面向对象程序设计:原则模式及实践》

6.3 SAP ABAP 开放封闭原则(OCP)- 摘自 《SAP ABAP面向对象程序设计:原则模式及实践》