接口隔离原则
Interface Segregation Principle 简称ISP。
什么是接口隔离原则
1.客户端不应该依赖它不需要的接口;
2.一个类对另一个类的依赖应该建立在最小的接口上。
也就是接口尽量细化,同时接口中的方法尽量少。它和单一职责原则的审视角度不同,单一职责原则要求的是职责单一,是业务逻辑的划分。而接口隔离原则要求接口的方法尽量少。
如何做到接口隔离原则
- 接口要尽量小
不出现臃肿的接口,但是小是有限度的,根据接口隔离原则拆分接口时,首先必须满足单一职责原则。 - 接口要高内聚,提高接口、类、模块的处理能力,减少对外的交互。
在接口中尽量少公布public方法,接口是对外的承诺,承诺地越少对系统开发越有利,变更的风险也就越少,同时也有利于降低成本。 - 定制服务
定制服务就是单独为一个个体提供优良的服务。 - 接口设计是有限度的
接口的设计粒度越小,系统越灵活,这是不争的事实。但是,灵活的同时也带来了结构的复杂化,开发难度增加,可维护性降低,所以接口设计一定要注意适度。
代码举例
在Javascript接口可以理解为:
- 一个对象声明的任意一个操作都包含一个操作名称,参数对象和操作的返回值。我们称之为操作符的签名(signature)。
- 一个对象里声明的所有的操作被称为这个对象的接口(interface)。一个对象的接口描绘了所有发生在这个对象上的请求信息。
第二段代码将goodStudent接口细分成了三个接口,如果后来判定好学生的标准改变了,也不用去修改接口。但是如果对所有的结果都做最小粒度的细分那就有无尽的接口了,所以设计粒度的问题还是要适度。
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;
}
}
网友评论