六大設(shè)計(jì)原則-接口隔離原則

接口隔離原則

Interface Segregation Principle 簡(jiǎn)稱ISP。

什么是接口隔離原則

1.客戶端不應(yīng)該依賴它不需要的接口;
2.一個(gè)類對(duì)另一個(gè)類的依賴應(yīng)該建立在最小的接口上。

也就是接口盡量細(xì)化,同時(shí)接口中的方法盡量少。它和單一職責(zé)原則的審視角度不同,單一職責(zé)原則要求的是職責(zé)單一,是業(yè)務(wù)邏輯的劃分。而接口隔離原則要求接口的方法盡量少。

如何做到接口隔離原則

  1. 接口要盡量小
    不出現(xiàn)臃腫的接口,但是小是有限度的,根據(jù)接口隔離原則拆分接口時(shí),首先必須滿足單一職責(zé)原則。
  2. 接口要高內(nèi)聚,提高接口、類、模塊的處理能力,減少對(duì)外的交互。
    在接口中盡量少公布public方法,接口是對(duì)外的承諾,承諾地越少對(duì)系統(tǒng)開(kāi)發(fā)越有利,變更的風(fēng)險(xiǎn)也就越少,同時(shí)也有利于降低成本。
  3. 定制服務(wù)
    定制服務(wù)就是單獨(dú)為一個(gè)個(gè)體提供優(yōu)良的服務(wù)。
  4. 接口設(shè)計(jì)是有限度的
    接口的設(shè)計(jì)粒度越小,系統(tǒng)越靈活,這是不爭(zhēng)的事實(shí)。但是,靈活的同時(shí)也帶來(lái)了結(jié)構(gòu)的復(fù)雜化,開(kāi)發(fā)難度增加,可維護(hù)性降低,所以接口設(shè)計(jì)一定要注意適度。

代碼舉例

在Javascript接口可以理解為:

  1. 一個(gè)對(duì)象聲明的任意一個(gè)操作都包含一個(gè)操作名稱,參數(shù)對(duì)象和操作的返回值。我們稱之為操作符的簽名(signature)。
  2. 一個(gè)對(duì)象里聲明的所有的操作被稱為這個(gè)對(duì)象的接口(interface)。一個(gè)對(duì)象的接口描繪了所有發(fā)生在這個(gè)對(duì)象上的請(qǐng)求信息。

第二段代碼將goodStudent接口細(xì)分成了三個(gè)接口,如果后來(lái)判定好學(xué)生的標(biāo)準(zhǔn)改變了,也不用去修改接口。但是如果對(duì)所有的結(jié)果都做最小粒度的細(xì)分那就有無(wú)盡的接口了,所以設(shè)計(jì)粒度的問(wèn)題還是要適度。

class Student {
  constructor({ study, sport, talent }) {
    this.study = study;
    this.sport = sport;
    this.talent = talent;
  }
  goodStudent() {
    return this.study && this.sport && this.talent;
  }
}
class Student {
  constructor({ study, sport, talent }) {
    this.study = study;
    this.sport = sport;
    this.talent = talent;
  }
  goodstudy() {
    return this.study;
  }

  goodSport() {
    return this.sport;
  }

  goodTalent() {
    return this.talent;
  }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容