亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Verzeichnis suchen
前言 入門(mén)指南 代碼風(fēng)格指南 語(yǔ)言亮點(diǎn) 編程范式 命名空間 PHP標(biāo)準(zhǔn)庫(kù) 命令行接口 Xdebug 依賴(lài)管理 使用當(dāng)前穩(wěn)定版本的 PHP (7.1) Mac 系統(tǒng)安裝 PHP Windows 系統(tǒng)安裝 PHP 內(nèi)置的 web 服務(wù)器 Composer 與 Packagist PEAR 介紹 開(kāi)發(fā)實(shí)踐 基礎(chǔ)知識(shí) 日期和時(shí)間 設(shè)計(jì)模式 使用 UTF-8 編碼 國(guó)際化 (i18n) 與本地化 (l10n) 一般的實(shí)現(xiàn)方法 Gettext 依賴(lài)注入 基本概念 復(fù)雜的問(wèn)題 容器 數(shù)據(jù)庫(kù) MySQL 擴(kuò)展 PDO 擴(kuò)展 數(shù)據(jù)庫(kù)交互 數(shù)據(jù)庫(kù)抽象層 使用模板 好處 原生 PHP 模板 編譯型模板 錯(cuò)誤與異常 錯(cuò)誤 異常 安全 Web 應(yīng)用程序安全 密碼哈希 數(shù)據(jù)過(guò)濾 配置文件 注冊(cè)全局變量 錯(cuò)誤報(bào)告 測(cè)試 測(cè)試驅(qū)動(dòng)開(kāi)發(fā) 其他測(cè)試工具 服務(wù)器與部署 虛擬或?qū)S梅?wù)器 共享主機(jī) 構(gòu)建及部署應(yīng)用 虛擬化技術(shù) Vagrant 簡(jiǎn)介 Docker 簡(jiǎn)介 緩存 Opcode 緩存 對(duì)象緩存 文檔撰寫(xiě) PHPDoc 資源 PHP 官方 值得關(guān)注的大牛 指導(dǎo) PHP 的 Paas 提供商 框架 組件 其他有用的資源 書(shū)籍 社區(qū) PHP 用戶(hù)組 PHP 會(huì)議 ElePHPants
Figuren

如果你曾經(jīng)了解過(guò)依賴(lài)注入,那么你可能見(jiàn)過(guò) “控制反轉(zhuǎn)”(Inversion of Control) 或者 “依賴(lài)反轉(zhuǎn)準(zhǔn)則”(Dependency Inversion Principle)這種說(shuō)法。這些是依賴(lài)注入能解決的更復(fù)雜的問(wèn)題。

控制反轉(zhuǎn)

顧名思義,一個(gè)系統(tǒng)通過(guò)組織控制和對(duì)象的完全分離來(lái)實(shí)現(xiàn)”控制反轉(zhuǎn)”。對(duì)于依賴(lài)注入,這就意味著通過(guò)在系統(tǒng)的其他地方控制和實(shí)例化依賴(lài)對(duì)象,從而實(shí)現(xiàn)了解耦。

一些 PHP 框架很早以前就已經(jīng)實(shí)現(xiàn)控制反轉(zhuǎn)了,但是問(wèn)題是,應(yīng)該反轉(zhuǎn)哪部分以及到什么程度?比如, MVC 框架通常會(huì)提供超類(lèi)或者基本的控制器類(lèi)以便其他控制器可以通過(guò)繼承來(lái)獲得相應(yīng)的依賴(lài)。這就是控制反轉(zhuǎn)的例子,但是這種方法是直接移除了依賴(lài)而不是減輕了依賴(lài)。

依賴(lài)注入允許我們通過(guò)按需注入的方式更加優(yōu)雅地解決這個(gè)問(wèn)題,完全不需要任何耦合。

依賴(lài)反轉(zhuǎn)準(zhǔn)則

依賴(lài)反轉(zhuǎn)準(zhǔn)則是面向?qū)ο笤O(shè)計(jì)準(zhǔn)則 S.O.L.I.D 中的 “D” ,倡導(dǎo) “依賴(lài)于抽象而不是具體”。簡(jiǎn)單來(lái)說(shuō)就是依賴(lài)應(yīng)該是接口/約定或者抽象類(lèi),而不是具體的實(shí)現(xiàn)。我們能很容易重構(gòu)前面的例子,使之遵循這個(gè)準(zhǔn)則

<?php 
namespace Database; 
class Database {     
protected $adapter;     
public function __construct(AdapterInterface $adapter){         
$this->adapter = $adapter;     
} 
} 
interface AdapterInterface {
} 
class MysqlAdapter implements AdapterInterface {
}

現(xiàn)在 Database 類(lèi)依賴(lài)于接口,相比依賴(lài)于具體實(shí)現(xiàn)有更多的優(yōu)勢(shì)。

假設(shè)你工作的團(tuán)隊(duì)中,一位同事負(fù)責(zé)設(shè)計(jì)適配器。在第一個(gè)例子中,我們需要等待適配器設(shè)計(jì)完之后才能單元測(cè)試?,F(xiàn)在由于依賴(lài)是一個(gè)接口/約定,我們能輕松地模擬接口測(cè)試,因?yàn)槲覀冎劳聲?huì)基于約定實(shí)現(xiàn)那個(gè)適配器

這種方法的一個(gè)更大的好處是代碼擴(kuò)展性變得更高。如果一年之后我們決定要遷移到一種不同的數(shù)據(jù)庫(kù),我們只需要寫(xiě)一個(gè)實(shí)現(xiàn)相應(yīng)接口的適配器并且注入進(jìn)去,由于適配器遵循接口的約定,我們不需要額外的重構(gòu)。


Vorheriger Artikel: N?chster Artikel: