搜尋
首頁php框架LaravelLaravel框架中外觀模式的深入解析

Laravel框架中外觀模式的深入解析

Jul 31, 2018 pm 03:13 PM
laravelphp外觀模式

laravel框架中的外觀模式(Facade Pattern)是外部與一個子系統的通訊必須透過一個統一的外觀物件進行,為子系統中的一組介面提供一個一致的介面,外觀模式定義了一個高層接口,這個接口使得這個子系統更容易使用。外觀模式又稱為門面模式,它是一種物件結構型模式。

Laravel中我們常用到的RouteRedisAuth這些Facade就是外觀模式的具體實現, 在Laravel中設計了多個外觀類,每個外觀類別繼承自統一的抽像外觀類,在抽像外觀類別裡提供了透過外觀類別存取其背後子系統的基礎方法。

對於新的業務需求,不要修改原有外觀類,而應該增加一個新的具體外觀類,由新的具體外觀類來關聯新的子系統對象,同時通過修改配置文件來達到不修改原始程式碼並更換外觀類別的目的。

下面是一個簡單的外觀模式的例子,並沒有引入抽像外觀類,在介紹Laravel Facade的文章中我們會看到Laravel裡提供了一個抽像外觀類從而讓我們能夠方便的根據需要增加新子系統的外觀類,並讓外觀類別能夠正確代理到其對應的子系統(或叫服務)。

模式結構

外觀模式包含以下角色:

  • Facade 外觀角色

  • SubSystem 子系統角色

Laravel框架中外觀模式的深入解析

#程式碼範例

<?php class Client
{
    public function main()
    {
        (new Facade)->operation();
    }
}

class Facade
{
    private $systemA;
    private $systemB;
    
    public function __construct()
    {
        $this->systemA = new SystemA;
        $this->systemB = new SystemB;
    }
    
    public function operation()
    {
        $this->systemA->operationA();
        $this->systemB->operationB();
    }
}

class SystemA
{
    public function operationA()
    {
        //
    }
}

class SystemB
{
    public function operationB()
    {
        //
    }
}

模式分析

根據“單一職責原則”,在軟體中將一個系統劃分為若干個子系統有利於降低整個系統的複雜性,一個常見的設計目標是使子系統間的通信和相互依賴關係達到最小,而達到該目標的途徑之一就是引入一個外觀對象,它為子系統的存取提供了一個簡單而單一的入口。 -外觀模式也是「迪米特法則」的體現,透過引入一個新的外觀類別可以降低原有系統的複雜度,同時降低客戶類別與子系統類別的耦合度。 - 外觀模式要求一個子系統的外部與其內部的通訊透過一個統一的外觀物件進行,外觀類別將客戶端與子系統的內部複雜性分隔開,使得客戶端只需要與外觀物件打交道,而不需要與子系統內部的許多物件打交道。 -外觀模式的目的在於降低系統的複雜程度。 -外觀模式從很大程度上提高了客戶端使用的便利性,使得客戶端無須關心子系統的工作細節,透過外觀角色即可呼叫相關功能。

缺點

外觀模式的缺點

  • 不能很好地限制客戶使用子系統類,如果對客戶存取子系統類別做太多的限制則減少了可變性和靈活性。

  • 在不引入抽像外觀類別的情況下,增加新的子系統可能需要修改外觀類別或客戶端的原始程式碼,違反了「開閉原則」。

模式擴展

  • 一個系統有多個外觀類別

    在外觀模式中,通常只需要一個外觀類,而此外觀類別只有一個實例,換言之它是一個單例類別。在許多情況下為了節約系統資源,一般將外觀類別設計為單例類別。當然這並不意味著在整個系統裡只能有一個外觀類,在一個系統中可以設計多個外觀類,每個外觀類都負責和一些特定的子系統交互,向用戶提供相應的業務功能。

  • 不要試圖透過外觀類別為子系統增加新行為

    不要透過繼承外觀類別在子系統中加入新的行為,這種做法是錯誤的。外觀模式的用意是為子系統提供一個集中化和簡化的溝通管道,而不是向子系統加入新的行為,新的行為的增加應該透過修改原有子系統類別或增加新的子系統類別來實現,不能透過外觀類別來實現。

  • 抽像外觀類別的引入

    外觀模式最大的缺點在於違背了“開閉原則”,當增加新的子系統或移除子系統時需要修改外觀類,可以透過引入抽像外觀類別在一定程度上解決該問題,客戶端針對抽像外觀類別進行程式設計。對於新的業務需求,不修改原有外觀類,而對應增加一個新的具體外觀類,由新的具體外觀類來關聯新的子系統對象,同時通過修改配置文件來達到不修改源代碼並更換外觀類別的目的。

總結

  • 在外觀模式中,外部與子系統的通訊必須透過一個統一的外觀物件進行,為子系統中的一組接口提供一個一致的介面,外觀模式定義了一個高層接口,這個接口使得這個子系統更容易使用。外觀模式又稱為門面模式,它是一種物件結構型模式。

  • 外觀模式包含兩個角色:外觀角色是在客戶端直接呼叫的角色,在外觀角色中可以知道相關的(一個或多個)子系統的功能和責任,它將所有從客戶端發來的請求委派到相應的子系統去,傳遞給相應的子系統對象處理;在軟體系統中可以同時有一個或者多個子系統角色,每個子系統可以不是一個單獨的類,而是一個類別的集合,它實現子系統的功能。

  • 外觀模式要求一個子系統的外部與其內部的通訊透過統一的外觀物件進行,外觀類別將客戶端與子系統的內部複雜性分隔開,使得客戶端只需要與外觀物件打交道,而不需要與子系統內部的許多物件打交道。

  • 外觀模式主要優點在於對客戶屏蔽子系統元件,減少了客戶處理的物件數目並使得子系統使用起來更加容易,它實現了子系統與客戶之間的松耦合關係,並降低了大型軟體系統中的編譯依賴性,簡化了系統在不同平台之間的移植過程;其缺點在於不能很好地限制客戶使用子系統類,而且在不引入抽像外觀類的情況下,增加新的子系統可能需要修改外觀類別或客戶端的原始程式碼,違反了「開閉原則」。

  • 外觀模式適用情況包括:要為一個複雜子系統提供一個簡單介面;客戶程式與多個子系統之間存在很大的依賴性;在層次化結構中,需要定義系統中每一層的入口,使得層與層之間不會直接產生聯繫。

以上就是本篇文章的全部內容,更多請關注laravel框架入門教學

相關文章推薦:

基於laravel5.2進行中間件原始碼的解析

Laravel本地環境搭建:Homestead開發環境的部署

相關課程推薦:

2017年最新的五個Laravel影片教學推薦

以上是Laravel框架中外觀模式的深入解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
行動中的Laravel:現實世界的應用和示例行動中的Laravel:現實世界的應用和示例Apr 16, 2025 am 12:02 AM

laravelcanbeeffectefection ininreal-worldapplications forbuildingscalablewebsolutions.1)ITSImplifieCrudoperationsInrestfulaPisusingEloquentorm.2)laravel'secosystem,包括Toolslikenova,包括Toolslikenova,增強功能

Laravel的主要功能:後端開發Laravel的主要功能:後端開發Apr 15, 2025 am 12:14 AM

Laravel在後端開發中的核心功能包括路由系統、EloquentORM、遷移功能、緩存系統和隊列系統。 1.路由系統簡化了URL映射,提高了代碼組織和維護性。 2.EloquentORM提供了面向對象的數據操作,提升了開發效率。 3.遷移功能通過版本控制管理數據庫結構,確保一致性。 4.緩存系統減少數據庫查詢,提升響應速度。 5.隊列系統有效處理大規模數據,避免阻塞用戶請求,提升整體性能。

Laravel的後端功能:數據庫,邏輯等等Laravel的後端功能:數據庫,邏輯等等Apr 14, 2025 am 12:04 AM

Laravel在後端開發中表現強大,通過EloquentORM簡化數據庫操作,控制器和服務類處理業務邏輯,並提供隊列、事件等功能。 1)EloquentORM通過模型映射數據庫表,簡化查詢。 2)業務邏輯在控制器和服務類中處理,提高模塊化和可維護性。 3)其他功能如隊列系統幫助處理複雜需求。

Laravel的多功能性:從簡單站點到復雜系統Laravel的多功能性:從簡單站點到復雜系統Apr 13, 2025 am 12:13 AM

選擇Laravel開發項目是因為其靈活性和強大功能適應不同規模和復雜度的需求。 Laravel提供路由系統、EloquentORM、Artisan命令行等功能,支持從簡單博客到復雜企業級系統的開發。

Laravel(PHP)與Python:開發環境和生態系統Laravel(PHP)與Python:開發環境和生態系統Apr 12, 2025 am 12:10 AM

Laravel和Python在開發環境和生態系統上的對比如下:1.Laravel的開發環境簡單,僅需PHP和Composer,提供了豐富的擴展包如LaravelForge,但擴展包維護可能不及時。 2.Python的開發環境也簡單,僅需Python和pip,生態系統龐大,涵蓋多個領域,但版本和依賴管理可能複雜。

Laravel和後端:為Web應用程序提供動力邏輯Laravel和後端:為Web應用程序提供動力邏輯Apr 11, 2025 am 11:29 AM

Laravel是如何在後端邏輯中發揮作用的?它通過路由系統、EloquentORM、認證與授權、事件與監聽器以及性能優化來簡化和增強後端開發。 1.路由系統允許定義URL結構和請求處理邏輯。 2.EloquentORM簡化數據庫交互。 3.認證與授權系統便於用戶管理。 4.事件與監聽器實現松耦合代碼結構。 5.性能優化通過緩存和隊列提高應用效率。

為什麼Laravel如此受歡迎?為什麼Laravel如此受歡迎?Apr 02, 2025 pm 02:16 PM

Laravel受歡迎的原因包括其簡化開發過程、提供愉快的開發環境和豐富的功能。 1)它吸收了RubyonRails的設計理念,結合PHP的靈活性。 2)提供瞭如EloquentORM、Blade模板引擎等工具,提高開發效率。 3)其MVC架構和依賴注入機制使代碼更加模塊化和可測試。 4)提供了強大的調試工具和性能優化方法,如緩存系統和最佳實踐。

django或laravel哪個更好?django或laravel哪個更好?Mar 28, 2025 am 10:41 AM

Django和Laravel都是全棧框架,Django適合Python開發者和復雜業務邏輯,Laravel適合PHP開發者和優雅語法。 1.Django基於Python,遵循“電池齊全”哲學,適合快速開發和高並發。 2.Laravel基於PHP,強調開發者體驗,適合小型到中型項目。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器