接口隔離原則
Interface Segregation Principle 簡稱ISP秕硝。
什么是接口隔離原則
1.客戶端不應(yīng)該依賴它不需要的接口独榴;
2.一個類對另一個類的依賴應(yīng)該建立在最小的接口上。
也就是接口盡量細化,同時接口中的方法盡量少。它和單一職責(zé)原則的審視角度不同,單一職責(zé)原則要求的是職責(zé)單一欣范,是業(yè)務(wù)邏輯的劃分。而接口隔離原則要求接口的方法盡量少令哟。
如何做到接口隔離原則
- 接口要盡量小
不出現(xiàn)臃腫的接口恼琼,但是小是有限度的,根據(jù)接口隔離原則拆分接口時屏富,首先必須滿足單一職責(zé)原則晴竞。 - 接口要高內(nèi)聚,提高接口役听、類颓鲜、模塊的處理能力表窘,減少對外的交互。
在接口中盡量少公布public方法甜滨,接口是對外的承諾乐严,承諾地越少對系統(tǒng)開發(fā)越有利,變更的風(fēng)險也就越少衣摩,同時也有利于降低成本昂验。 - 定制服務(wù)
定制服務(wù)就是單獨為一個個體提供優(yōu)良的服務(wù)。 - 接口設(shè)計是有限度的
接口的設(shè)計粒度越小艾扮,系統(tǒng)越靈活既琴,這是不爭的事實。但是泡嘴,靈活的同時也帶來了結(jié)構(gòu)的復(fù)雜化甫恩,開發(fā)難度增加,可維護性降低酌予,所以接口設(shè)計一定要注意適度磺箕。
代碼舉例
在Javascript接口可以理解為:
- 一個對象聲明的任意一個操作都包含一個操作名稱,參數(shù)對象和操作的返回值抛虫。我們稱之為操作符的簽名(signature)松靡。
- 一個對象里聲明的所有的操作被稱為這個對象的接口(interface)。一個對象的接口描繪了所有發(fā)生在這個對象上的請求信息建椰。
第二段代碼將goodStudent接口細分成了三個接口雕欺,如果后來判定好學(xué)生的標準改變了,也不用去修改接口棉姐。但是如果對所有的結(jié)果都做最小粒度的細分那就有無盡的接口了屠列,所以設(shè)計粒度的問題還是要適度。
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;
}
}