早在1988,Ralph E. Johnson與BrianFoote在文章Designing Reusable Classes中有一段話,成為控制反轉(Inversion of Control)的來由。
One important characteristic of a framework is that the methods defined by the user to tailor the framework will often be called from within the framework itself, rather than from the user"s application code. The framework often plays the role of the main program in coordinating and sequencing application activity. This inversion of control gives frameworks the power to serve as extensible skeletons. The methods supplied by the user tailor the generic algorithms defined in the framework for a particular application.【框架/framework的一個重要特徵是,為定製框架而由使用者定義的方法,常常由框架自己呼叫,而非由使用者的應用程式程式碼(來呼叫)。在協調和理順應用程式活動上,框架通常扮演主程式的角色。這種控制的反轉給予框架這樣的威力——作為一個可擴充套件的骨架。由使用者提供的方法,將框架中定義的一般性演算法加以定製給特定的應用。】
我問了一個問題:
什麼是IoC,誰能夠說明IoC出自哪篇文章?沒有人回答。很多人連它的出處都不知道,為什麼能夠信口開河?真是奇怪。包括Martin Fowler。
早在1988,Ralph E. Johnson與BrianFoote在文章Designing Reusable Classes中有一段話,成為控制反轉(Inversion of Control)的來由。
One important characteristic of a framework is that the methods defined by the user to tailor the framework will often be called from within the framework itself, rather than from the user"s application code. The framework often plays the role of the main program in coordinating and sequencing application activity. This inversion of control gives frameworks the power to serve as extensible skeletons. The methods supplied by the user tailor the generic algorithms defined in the framework for a particular application.【框架/framework的一個重要特徵是,為定製框架而由使用者定義的方法,常常由框架自己呼叫,而非由使用者的應用程式程式碼(來呼叫)。在協調和理順應用程式活動上,框架通常扮演主程式的角色。這種控制的反轉給予框架這樣的威力——作為一個可擴充套件的骨架。由使用者提供的方法,將框架中定義的一般性演算法加以定製給特定的應用。】
★控制反轉/Ioc,即框架控制一切,應用程式設計師提供支援程式碼。IoC反映了某些應用程式設計師的失落心情:從自由自在變為受控於人。IoC描述了一種現象:軟體設計決定的控制權,由應用程式設計師轉移到框架設計者手中。除此之外,IoC沒有任何其他含義。
Martin Fowler嘲笑幾位輕量級容器的作者,"我的轎車是與眾不同的,因為它有四個輪子"。然而,提出DI的Martin Fowler,其實五十步笑一百步。Spring DI容器僅僅是工具箱。它和框架、控制反轉IoC,一點關係都沒有。它完全是一個腳踏車,只有兩個輪子。
Martin Fowler的文章《IoC容器和依賴注入模式》,前面剛剛說圖形使用者介面中程式的主控權發生了反轉,接著又說“反轉的是如何定位外掛的具體實現”。
IoC不是變形金剛,在不同場合就反轉不同東西。我抽菸可以自己點火,如果別人幫我點火——它們反轉的是什麼——點火的人?社會地位的高低貴賤?腦洞不要太大。
參考:什麼是依賴注入——板磚拍Martin Fowler