六大设计原则-接口隔离原则

接口隔离原则

Interface Segregation Principle 简称ISP。

什么是接口隔离原则

1.客户端不应该依赖它不需要的接口;
2.一个类对另一个类的依赖应该建立在最小的接口上。

也就是接口尽量细化,同时接口中的方法尽量少。它和单一职责原则的审视角度不同,单一职责原则要求的是职责单一,是业务逻辑的划分。而接口隔离原则要求接口的方法尽量少。

如何做到接口隔离原则

  1. 接口要尽量小
    不出现臃肿的接口,但是小是有限度的,根据接口隔离原则拆分接口时,首先必须满足单一职责原则。
  2. 接口要高内聚,提高接口、类、模块的处理能力,减少对外的交互。
    在接口中尽量少公布public方法,接口是对外的承诺,承诺地越少对系统开发越有利,变更的风险也就越少,同时也有利于降低成本。
  3. 定制服务
    定制服务就是单独为一个个体提供优良的服务。
  4. 接口设计是有限度的
    接口的设计粒度越小,系统越灵活,这是不争的事实。但是,灵活的同时也带来了结构的复杂化,开发难度增加,可维护性降低,所以接口设计一定要注意适度。

代码举例

在Javascript接口可以理解为:

  1. 一个对象声明的任意一个操作都包含一个操作名称,参数对象和操作的返回值。我们称之为操作符的签名(signature)。
  2. 一个对象里声明的所有的操作被称为这个对象的接口(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;
  }
}

你可能感兴趣的:(六大设计原则-接口隔离原则)