七大設計原則:接口隔離原則,你是怎麼應用的呢?

2020-12-16 一線IT民工

紙上得來終覺淺,絕知此事要躬行。——陸遊

※引導語

在設計開發過程中往往會出現這麼一現象:在開始設計、開發的時候,一個接口的用來做什麼什麼的設計的很明確,前期開發過程中接口看著也比較惹人喜愛;隨著,開發周期的拉長,尤其是經過幾人手後,你會發現,它再也不是那個接口了,而是變得臃腫,都不想看了。

那怎麼辦呢?

好辦,學好咱們今天講的接口隔離原則,並應用之。

01 接口隔離原則是什麼

定義

接口隔離原則可以定義為:建立單一接口,不要建立臃腫龐大的接口。

也就是說,接口儘量細化,同時接口中的方法儘量少。

看到這,大家可能會不由自主的想到前面講的 單一職責原則,「咔」。這裡大家一定要注意,單一職責原則,強調的是職責,站在業務邏輯的角度;而接口隔離原則,強調接口的方法儘量少。

02 接口隔離原則的好處

符合我們常說的高內聚低耦合的設計思想,從而使得類具有很好的可讀性、可擴展性和可維護性。

03 接口隔離原則規約

在設計接口的時候,我們可以參考以下幾點規約:

接口要儘量小這個也是接口隔離原則定義中的核心點,不出現臃腫的接口(Fat Interface),但是「小」是有限度的,首先就是不能違反單一職責原則,因此,我們在設計接口的時候,也要站在業務角度考慮。

接口要高內聚什麼是高內聚?高內聚就是提高接口、類、模塊的處理能力,減少對外的交互。具體到接口隔離原則就是,要求在接口中儘量少公布public方法,接口是對外的承諾,承諾越少對系統的開發越有利,變更的風險也就越少,同時也有利於降低成本。

說到高內聚,低耦合必然得提一下。

模塊之間存在依賴,關係越緊密, 耦合越強, 模塊獨立性越差。

模塊內部的元素, 關聯性越強, 則內聚越高, 模塊單一性更強。

因此,好多設計都是基於高內聚低耦合這點考慮的。

定製服務一個系統或系統內的模塊之間必然會有耦合,有耦合就要有相互訪問的接口(並不一定就是Java中定義的Interface,也可能是一個類或單純的數據交換),我們設計時就需要為各個訪問者(即客戶端)定製服務,什麼是定製服務?定製服務就是單獨為一個個體提供優良的服務。我們在做系統設計時也需要考慮對系統之間或模塊之間的接口採用定製服務。

採用定製服務就必然有一個要求:只提供訪問者需要的方法,這是什麼意思?

大家可以回想一下自己是怎麼做的,如何寫這個對外接口的。

我舉幾個遇到過的例子:

情況1:原來已經有的(可能給後臺用的返回所有信息的)接口,直接提供。(不建議,尤其大內容耗時查詢)

情況2:有個現成的實現,直接包個接口(Controller)提供出去。(不建議,尤其大內容耗時查詢)

情況3:新寫一個,按需(所需欄位信息)包裝接口對外。(建議)

針對於情況1和2,尤其是在並發量大的時候,很容易導致應用服務的性能下降,嚴重的造成服務宕機。

接口設計是有限度的接口的設計粒度越小,系統越靈活,這是不爭的事實。但是,靈活的同時也帶來了結構的複雜化,開發難度增加,可維護性降低,這不是一個項目或產品所期望看到的,所以接口設計一定要注意適度,這個「度」如何來判斷呢?根據經驗和常識判斷,沒有一個固化或可測量的標準。

04 代碼示例

打電話類圖(結合前面講的UML看此圖)

IConnectionManager:建立連接

IDataTransfer:語音數據轉換

Phone:實現電話功能

關注回復 6,獲取原始碼。

05 總結

您的點讚、在看和關注,是對小編莫大的支持和鼓勵喲!

相關焦點

  • 設計模式六大原則(4):接口隔離原則
    如果將這個設計修改為符合接口隔離原則,就必須對接口I進行拆分。在這裡我們將原有的接口I拆分為三個接口,拆分後的設計如圖2所示:也就是說,我們要為各個類建立專用的接口,而不要試圖去建立一個很龐大的接口供所有依賴它的類去調用。本文例子中,將一個龐大的接口變更為3個專用的接口所採用的就是接口隔離原則。在程序設計中,依賴幾個專用的接口要比依賴一個綜合的接口更靈活。接口是設計時對外部設定的「契約」,通過分散定義多個接口,可以預防外來變更的擴散,提高系統的靈活性和可維護性。
  • 設計模式 接口隔離原則
    設計模式 接口隔離原則用類圖說明對好看的定義,發生了改變,那麼就應該改變PettyGirl中的內容,但是已經在接口中定義了。那麼就有問題了。即,接口承擔的內容過多導致接口隔離原則發現問題了。接口被過度的封裝了,那麼就要進行拆分。
  • 爬梯:七大設計原則
    設計原則設計模式原則,其實就是程式設計師在編程時,應當遵守的原則,也是各種設計模式的基礎(即:設計模式設計的依據)1、單一職責原則基本介紹對類來說,即一個類應該只負責一項職責。2、接口隔離原則Interface Segregation Principle一個類對另一個類的依賴,應該建立在最小的接口上。
  • 設計原則之開閉原則
    抽象化是關鍵,也是我們經常聽到的「面象接口編程」,具體一點就是聲明的變量的類型、函數的參數類型、函數的返回類型等要儘量使用抽象類和接口。開閉原則實際也是「對可變性的封裝原則」,那就是「考慮你的設計中什麼可能發生變化,找到一個系統的可變因素,將它封裝起來」。把變化封閉起來也就是我們經常用到的繼承,編寫一個抽象類用子類來繼承他,或者編寫一個接口讓子類去實現他。
  • 軟體設計模式六大原則,你懂多少呢?
    軟體設計模式軟體設計模式,簡稱設計模式,它是一種反反覆覆被使用,多數人經過分類編目的,代碼設計經驗的總結。使用設計模式可以為了減少重複的代碼,讓代碼變得更加簡潔,讓人更加容易理解,保證代碼的可靠性,程序可重複性。設計模式的六大原則,你懂多少呢?1.六大原則-單一職責原則原則思想:一個方法只負責一件事情。
  • SOLID設計原則解釋 - 單一責任原則
    SOLID是面向對象軟體開發中最流行的設計原則之一。它是以下五個設計原則的助記符縮寫:單一責任原則開放/封閉原則利斯科夫替代原則接口隔離原理依賴倒置>單一責任原則的好處在我們深入探討這個設計原則之前,讓我們先解決最重要的問題:為什麼要使用它?
  • 設計模式設計原則——備忘錄
    想要達到這樣的效果,我們需要使用接口和抽象類。2、裡氏代換原則(Liskov Substitution Principle)裡氏代換原則是面向對象設計的基本原則之一。實現開閉原則的關鍵步驟就是抽象化,而父類與子類的繼承關係就是抽象化的具體體現,所以裡氏代換原則是對實現抽象化的具體步驟的規範。3、依賴倒轉原則(Dependence Inversion Principle)依賴倒轉原則是開閉原則的基礎。
  • 代碼要依賴倒轉,還要接口隔離,這些原則裡再要依賴注入不是吧?
    目錄 依賴倒轉原則: 依賴注入 構造注入: 設值注入: 接口隔離原則:
  • 問卷設計的五大要素七大原則
    一份設計很精妙的問卷如果與研究主題無關,那麼其價值也是很低的。通常,一個研究主題會由幾個不同的維度來解釋,在問卷擬題初期,每個維度最好設計10個問題左右,經過反覆挑選後,在正式問卷中每個維度至少要有3個問題。2. 需考慮題目的易理解性問卷調查能否成功很大程度上取決於問卷的易理解程度。
  • 設計的五大原則-SOLID
    在這本書裡面的第三章介紹了設計原則,這部分我覺得對於大家的平時工作都比較有用。2. 設計原則想必大家在學習面向對象的時候,都學習過下面幾大原則:SRP 單一職責:該設計原則是基於康威定律的推論,每個軟體模塊有且只有一個被更改的理由。OCP 開閉原則:對擴展開放,對修改關閉。LSP 裡氏替換原則:任何基類可以出現的地方,子類一定可以出現。
  • 萬字長文帶你捋清六種設計模式的設計原則(建議收藏)
    類與類之間的關係是怎麼樣的,為什麼需要依賴,怎麼可以不依賴?要不要加一個接口?接口的存在是為了解決什麼問題?當然,本文並不是教你是如何使用設計模式。而是講解設計模式的設計原則。設計模式在被設計出來的時候,也是遵循一些規則的。
  • 軟體設計的幾大原則匯總
    軟體設計的幾大原則匯總單一職責原則單一職責原則:英文為Single Responsibility Principle(SRP),這個原則要求我們在設計類或者接口的時候尤其在設計接口的時候把職責分清楚,通常一個職責不是單一的方法,是一類方法的組合。在開發的時候很難做到單一,我們在接口設計時一定做單單一,在類的設計時儘量做到單一原因引起變化。
  • 程序設計開發的六大原則 核心思想
    三、依賴倒置原則  Dependence Inversion Principle,高層模塊不應該依賴低層模塊,兩者都應該依賴其抽象;抽象不應該依賴細節;細節應該依賴抽象;在Java語言中的表達就是,模塊間的依賴通過抽象發生,實現類之間不發生直接的依賴關係,其依賴關係是通過接口或抽象類產生的;接口或抽象類不依賴於實現類;實現類依賴接口或抽象類
  • .NET 設計模式的六大原則理論知識
    依賴倒置原則(DIP)(Dependence Inversion Principle)4. 接口隔離原則(ISP)(Interface Segregation Principle)5. 迪米特原則(LOD)(Law Of Demeter)6.
  • 設計模式:單一職責原則
    其實上單一職責原則和接口隔離原則有一定的關係,接口隔離以後,職責就單一了,實現這個接口的類的職責自然也就單一了。但是接口隔離關注的是抽象層,單一職責關注的是兩者兼而有之,偏重於實現。3、降低變更的風險一個類的職責越多,變更的可能性就更大,變更帶來的風險也就越大,3、如何遵守單一職責原則合理的職責分解相同的職責放到一起,不同的職責分解到不同的接口和實現中去,這個是最容易也是最難運用的原則
  • 今日談論:品牌logo設計的七大原則
    品牌logo設計是否優秀,在品牌的設計圈早已有了一個主流的標準,對此眾多經驗豐富的設計師都將銘記於心.隨著平面設計的閱歷不斷積累,你會越來覺得這個標準是那麼經典且具有指導意義.那很多人會問這個標準是什麼呢?
  • 交互原則:互動設計七大定律詳解(上)
    新鄉重夫防錯原則(POKA-YOKE)在看文之前,提一個問題,大家可以思考一下:為什麼風靡一時的「漢堡包導航」在APP上不再受歡迎?「互動設計七大定律」應該是各種交互原則中大家都比較耳熟能詳的名字了,但是這種說法是出自哪裡呢?
  • PHPer必學的進階教程:PHP面向對象設計的五個基準原則
    學習PHP的朋友們都知道,PHP在中小型企業的應用是非常廣泛包括建站、小程序、CRM與OA等。那麼作為基礎中的基礎,PHP面向對象你又掌握了多少呢?今天這篇文章,就來給大家講一講關於面向對象的一些事,希望能對大家有所幫助。什麼是面向對象?
  • 六大設計原則超詳細介紹(再不理解你打我)
    軟體設計最大的難題就是應對需求的變化,但是紛繁複雜的需求變化又是不可預料的,我們要為不可預料的變化做好準備,這本身是一件非常痛苦的事情,但好在有大師們已經給我們提出了非常好的六大設計原則和23種設計模式來「封裝」未來的變化。本文只針對六大設計原則進行介紹,設計模式放在後面的文章進行詳解。
  • 作為程式設計師不可不會的設計模式七大原則之——「開閉原則」
    今天給大家分享一下設計模式七大原則中的「開閉原則」,也稱為OCP原則。好了閒話不多說,直接進入正文。「開閉原則」是面向對象編程中最基礎和最重要的設計原則之一。我們在設計程序中使用一些設計模式和遵守相關的設計原則,都是為了可以使我們的程序可以實現「開閉」!說了這麼多,那到底什麼是開閉原則那?