自十年前Martin Fowler , Robert Martin和其他人描述IoC以来,它已经成为许多框架和面向对象设计的基础概念。 尽管IoC非常流行,但它经常被误解和过于复杂。
看下面的代码:
print(book.title());
这非常简单:我们从书中检索标题,然后将其简单地交给print()
过程,或者其他可能的过程。 我们负责, 控制掌握在我们手中。
与此相反,这是反转 :
print(book);
我们将整本书交给过程print()
并在感觉合适时调用title()
。 也就是说,我们委派控制权。
您几乎需要了解有关IoC的所有信息。
它与依赖注入容器有关系吗? 好吧,当然,我们可以将书放入容器中,将整个容器注入print()
,让它从容器中检索书,然后调用title()
。 但这并不是IoC真正的目的,它只是其变态的使用场景之一。
IoC的要点与我以前的文章中有关裸数据和对象朋友的提议完全相同:我们不能处理数据 ,而只能处理对象组成 。 在给定的示例中,如果我们完全摆脱print()
过程,并用一个对象替换它,则设计会更好:
new PrintedBook(book);
那将是纯粹的对象合成 。
关于这个问题,没有更多的话要说了。 我希望我已经为您解决了它—就是这么简单。
翻译自: https://www.javacodegeeks.com/2017/05/inversion-control-really-work.html