以簡御繁 介紹IOC

極客Bob發表於2021-12-30

1.IOC的理論背景

 大家開發理念,一直都是奔著架構穩定、低耦合性。而IOC初衷,就是為了解決模組依賴問題,理解《六大設計原則(SOLID)》

如圖所示,在我們開發中,業務的實現,就是靠著模組中的類與類、跨模組的類與類,相互呼叫與依賴完成的。而這就導致我們改動一個類,就會使得所有用到這個類的地方都要改一遍。比如把My SQL更換成SQL Server,我們不應該影響業務程式碼,只需要更改資料驅動的實現就行(我相信大家遇見過這種煩人的事情

而這個時候我們就想,可不可以不由我們自己例項化,而是交給一個專門的工廠幫我們例項化(IOC的前身其實就是工廠)為了解決這個問題,軟體專家Michael Mattson提出了IOC理論

2.什麼是IOC 

IOC(控制反轉)是Inversion of Control的縮寫,IOC理念就是為了解決背景交代的問題,是一種設計思想可以認為是一種全新的設計模式,我們具體刨析一下控制反轉設計思想:

  1. 控制:首先控制例項的建立,不用程式設計的時候去控制具體建立什麼例項,而是交給工廠,他是第三方的概念,他和我們業務沒任何關係,我們面向抽象程式設計,由它幫我們統一控制例項建立,改變它,就所有的統一改變!(完美
  2. 反轉:其次物件之間依賴不能由我們去建立,我們呼叫的時候,不用關心被呼叫的類與其他類之間的依賴建立,也交給第三方去幫我們解決依賴的問題,我們只管呼叫。(更完美

IOC容器第三方)就是為了這兩個設計理念而誕生的,我們只需要把例項對映關係註冊到IOC容器中,例項的建立由容器統一構建,如上圖所示。

但產生了另一個問題,既然呼叫者不關心我的依賴,那我依賴的物件怎麼來,難道憑空產生?於是就有了注入這種模式。

3.什麼是DI

DI(依賴注入)是Dependency Injection的縮寫,所以他們其實是為了解決同一問題。

Martin Fowler(馬丁·福勒),國際著名的OO專家,認為我們需要為該模式指定一個更具體的名稱。控制反轉是一個過於籠統的術語,因此人們會感到困惑。與IoC倡導者進行了大量討論之後,決定使用依賴注入這個名稱。 

依賴項注入有三種主要樣式,分別是:建構函式注入、屬性注入、介面注入

總結

是不是沒我們想的那麼高深,且難以理解。簡單來說:其實就是一種架構思想而引生出來的一個工具。目的還是為了解耦,使架構更穩定。

 

其他

其他相關具體實現原理和使用方式,我就不詳細介紹了,大家可以查詢相關資料學習。後面我會通過程式碼實現一個我們自己的IOC容器,並且嵌入到.NET Core框架,以便於大家對IOC更深層次的理解。大家可以關注我後續更新,由於是空餘時間更新,所以更新時間比較慢。

我也給大家貼一下《控制反轉容器和依賴注入模式》文章地址:

  1. 原文章地址:http://martinfowler.com/articles/injection.html
  2. 中文翻譯地址:https://files.cnblogs.com/files/stono/DependencyInjection.pdf

相關文章