Yii 是我們后端選用的一個 PHP 開發(fā)框架;框架的一個重要的好處就是幫你做了很多事情,讓你少寫很多代碼,并且看起來清晰,可以讓你更聚焦在你的業(yè)務上。
要用好框架,需要你了解很多概念。依賴注入(Denpdency Injection)和服務定位器(Service Locator)就是兩個重要的基本概念?!禗igpage 深入理解 Yii 2.0》依賴注入和依賴注入容器 和 服務定位器 說得非常清楚。
本文就這兩個概念和 Yii 2.0 實現(xiàn)簡要描述一下。
DIP -> IoC -> DI & SL

傳承關系

DI & SL
- SOLID;
- @ Inversion Of Control vs Dependency Injection;
- Martin Fowler: Inversion of Control Containers and the Dependency Injection pattern; 經典文章,值得讀;
- Service Locator, Dependency Injection (and Container) and Inversion of Control;
- DIP:依賴倒置原則(Dependence Inversion Principle)
- IoC:控制反轉(Inversion of Control)
IoC 是 DIP 的一種具體思路,DIP 只是一種理念、思想,而 IoC 是一種實現(xiàn) DIP 的方法。
IoC 的核心是將類(上層)所依賴的單元(下層)的 實例化過程 交由第三方來實現(xiàn)。
一個簡單的特征,就是類中不對所依賴的單元有諸如 $component = new yii\component\SomeClass() 的實例化語句。 - DI pattern:依賴注入(Denpdency Injection)
DI 是 IoC 的一種設計模式,是一種套路,按照 DI 的套路,就可以實現(xiàn) IoC,就能符合 DIP 原則。 DI 的核心是把類所依賴的單元的實例化過程,放到類的外面去實現(xiàn)。
相對于 IoC,DI 是一個更具象的概念; - 在實際行文中,IoC Container 和 DI Container 通常指的都是一回事;
通過配置實現(xiàn)依賴關系的映射

Yii db component
Database connection is often used as an application component and configured in the application configuration like the following(config/main.php):
'components' => [
'db' => [
'class' => '\yii\db\Connection',
'dsn' => 'mysql:host=127.0.0.1;dbname=demo',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
],
],
- 'db' 是默認的 database connection;
- 假如有多個 database connections,在使用非默認鏈接時可以 override getDb() 函數(shù);
Yii 2.0
- Yii 中是把 Service Locator 和 DI Container 結合起來用的,Service Locator 是建立在 DI 容器之上的。
- Service Locator
類名、別名、接口名; - 通過 config/main.php 文件來配置 Service Locator 映射關系;
- 注入:構造函數(shù)注入和屬性注入;
- Yii 2.0 大多是屬性注入;
- 注冊(register | set)和 解析(resolve | get)
- DI 容器解析依賴獲取實例的過程是自動完成的;
層層依賴(依賴嵌套)自動遞歸完成; - 入口腳本 index.php require Yii.php:Yii::$container = new yii\di\Container;
- 入口腳本 index.php 的 $application 是一個 Service Locator;
yii\web\Application => yii\base\Application => yii\base\Module => yii\di\ServiceLocator - 你常使用的 Yii::$app,就是入口腳本 index.php 的 $application;
yii\base\Application::__construct() 中實現(xiàn) Yii::$app = $this;
DI 容器解析依賴獲取實例的過程示意圖

DI容器解析依賴獲取實例的過程示意圖(用心制作的一張圖?。?/div>
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
相關閱讀更多精彩內容
- 文章作者:Tyan博客:noahsnail.com 3.4 Dependencies A typical ente...
- IOC/DI是Spring的核心思想,其在Spring生態(tài)圈中有著舉足輕重的作用,地位崇高,今天我們就來看看IOC...
- 文章作者:Tyan博客:noahsnail.com 2.Introduction to the Spring Fr...