介面隔離原則(ISP),第四個SOLID原則

分離介面

介面隔離的原則之一是 五項原則 SOLID 物件導向設計。

一個類別應該有多個更小、更集中的介面。

然後用戶類別選擇與他們相關的接口,減少不必要的依賴。

預計閱讀時間: 3 minuti

ISP 和 Laravel

在 Laravel 中,界面隔離原則強調重點突出且內聚的介面設計。與其創建整體接口,不如根據實現類的需求設計特定的接口。

讓我們考慮一個快取服務的介面。我們不要將所有快取方法分組到一個介面中,而是根據功能將它們分開。

// CacheServiceInterface.php
interface CacheServiceInterface
{
    public function store($key, $value);
    public function retrieve($key);
}
      

優點

  1. 減少依賴: 透過僅實現相關接口,類別就不會承受它們不需要的不必要方法的負擔。
  2. 維護更方便: 對介面的變更或添加不會影響不相關的類,從而提高程式碼的可維護性。
  3. 可讀性: 程式碼變得更具可讀性和不言自明,因為類別對其功能是明確的。

例子

現在讓我們來看一個 Laravel 中介面隔離原則的應用範例。

假設我們要開發一個電子商務平台。我們有不同類型的使用者:客戶和管理員。這些用戶具有獨特的能力:

  1. 客戶:
    • 查看產品
    • 將產品加入購物車
    • 下訂單
  2. 管理員:
    • 管理產品
    • 管理訂單
    • 管理客戶

在傳統方法中,您可能會建立一個大型命名介面 UserInterface 其中包括所有必要的方法。這會導致不必要的功能耦合,從而降低系統的靈活性。

        interface UserInterface {
            public function viewProducts();
            public function addProductsToCart();
            public function placeOrders();
            public function manageProducts();
            public function manageOrders();
            public function manageCustomers();
        }
              

        ISP應用程式: 現在讓我們將介面隔離原則應用到這個場景。建立單獨的介面 CustomerInterface e AdminInterface:

        interface CustomerInterface {
            public function viewProducts();
            public function addProductsToCart();
            public function placeOrders();
        }
        
        interface AdminInterface {
            public function manageProducts();
            public function manageOrders();
            public function manageCustomers();
        }
              

        在各自的類別中實作這些介面:

        class Customer implements CustomerInterface {
            // Implement methods specific to customers
        }
        
        class Admin implements AdminInterface {
            // Implement methods specific to admins
        }
              

        介面隔離原則是一個基本概念,建議創建有針對性且可維護的軟體元件。在 Laravel 中,應用此原則可確保程式碼庫保持靈活、可擴展且易於理解。透過根據特定功能隔離接口,您可以為更有組織、更健壯的應用程式架構鋪平道路。

        相關閱讀

        Ercole Palmeri

        作者