IoC这个名字其实不够合理

IoC,即Inversion of Control,中文也叫控制反转,最常见于Spring中,但其实这个名字并不够合理,控制转移才是一个贴切的名字。

首先看看什么叫反转,不论是英文的Inversion还是中文的”反转“,意思都差不多:反转,指转向相反的方向。基本上应该属于以下情况:以前向左现在向右;以前前进,现在后退;以前是牛市,现在是熊市;以前是被地主压迫的农民工人,现在打倒地主资本家翻身做主人。

那么我们再来看看控制反转,指的是“以前是应用程序控制资源(对象、配置文件),现在是框架/IoC容器控制资源(对象、配置文件)“。仔细看看,应用程序和IoC容器其实没有半毛钱的关系,所以他俩不存在”反转“的可能性。事实上,二者之间的关系更像合作。可以看下面的比喻:

对象、配置文件相当于程序员,应用程序相当于软件公司,IoC框架相当于外包公司。以前软件公司自己招程序员,如果开发语言发生变化,不能随意辞退重新招,这样不够灵活(相当于代码写死);而使用IoC框架以后,程序员全部成了外包人员,软件公司要什么,外包公司就给提供一个相应的程序员,如果开发语言发生变化,那么软件公司不需要开除员工重新招,找外包公司换一个即可(即使用配置文件,如果实现类变化,不需要修改代码,只需修改配置文件为新实现类即可)。程序员的社保等(被控制权)从软件公司转移到了外包公司。但不论什么时候,真正干活、创造价值的其实还是程序员。

综上,控制(Control)从来没有被反转(Inversion),仅仅只是转移(transition)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章