How Does Inversion of Control Really Work?

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

IoC 自从 Martin FowlerRobert Martin其他人 在十年前描述了它以来,似乎已成为许多框架和面向对象设计的基石概念。尽管它很受欢迎,但 IoC 经常被误解和过度复杂化。

print(book.title());

这很简单:我们从书中取出标题并将其直接提供给print()过程,或者任何其他可能的过程。我们负责,控制在我们手中。

相比之下,这里是反转

我们将整本书交给print()过程,并在需要时调用title()。也就是说,我们将控制权“委托”给了它。

这基本上是关于IoC的一切你需要知道的。

它与依赖注入容器有关吗?当然,我们可以将书放入容器中,将整个容器注入到print()中,让它从容器中取出书,然后调用title()。但这并不是IoC真正关心的—它只是其中一种扭曲的使用场景。

IoC的主要观点与我在之前的帖子中提出的关于裸露数据和对象友元的观点完全相同:我们不应该处理数据,而应该只处理对象组合。在给定的示例中,如果我们完全摒弃print()过程,用一个对象来替代它,设计会更好:

那就是纯粹的对象组合。

对于这个话题,没有更多要说的了;希望我已经为你澄清了——就是这么简单。

Translated by ChatGPT gpt-3.5-turbo/42 on 2024-01-09 at 18:09

sixnines availability badge   GitHub stars