设计原则(四):接口隔离原则

star2017 1年前 ⋅ 881 阅读

接口隔离原则:使用多个专职的接口比使用单一庞大的臃肿总接口要好。即一个类对另外一个类的依赖性应当是建立在最小的接口上的。即接口尽量细化,保证接口的纯洁性。

接口隔离

每一个接口相当于代表一个角色,实现一个接口的对象,在它的整个生命周期中都扮演这个角色,因此将角色区分清楚就是系统设计的一个重要工作。

因此,一个符合逻辑的推断,不应当将几个不同的角色都交给同一个接口,而应当交给不同的接口。准确而恰当地划分角色以及角色所对应的接口,是面向对象的设计的一个重要的组成部分。若将没有关系的接口合并在一起,形成一个臃肿的大接口,是对角色和接口的污染。

接口隔离原则是对接口进行规范约束,其包含以下4层含义:

  • 接口要尽量小

    接口隔离原则的核心定义,不出现臃肿的接口。但注意,尽量小也是有限度的,要从业务逻辑上考虑,接口控制到最小的业务单元就足够了。

    根据接口隔离原则,拆分接口时中,首先必须满足单一职责原则。

  • 接口要高内聚

    即要提高接口、类、模块的处理能力,减少对外的交互和依赖。要在接口中尽量少公布 public 方法,接口是对外的承诺,承诺越少对系统的开发越有利,变更的风险也越少,同时也利于降低成本。

  • 提供定制服务

    一个系统或系统模式之间必然会有耦合,就会有相互访问的接口。在设计时就需要为各个访问者定制服务,即为满足差异化的访问,单独为一个个体提供优良的服务。

    仅提供客户需要的方法,不提供不需要的方法。

  • 接口有限粒度

    接口的设计粒度越小,系统越灵活,但同时也会带来结构的复杂化,增加开发难度,降低可维护性。所以接口设计一定要注意适度,这只能根据经验和常识判断了,没有固化或可测量的标准。

接口隔离原则 也是符合 迪米特法则 的。

接口隔离优点

  1. 接口隔离原则也适用于定制服务,即仅提供客户需要的方法,而不提供不需要的方法。

  2. 提高系统的可维护性:向客户端提供的 public 接口是一种承诺,一个 public 接口一旦提供,就很难撤回,过多的承诺会给系统的维护增加不必要的负担。

    如果提供服务的接口出现变化,设计师知道具体是那些级别的接口会影响到对应的客户端,哪些不会受到影响。

接口隔离示例

全文查询引擎的系统的接口设计。

不好的例子:一个接口负责所有的操作,从提供搜索功能到建立索引,甚至包括搜索结果集合的功能均在一个接口内提供。这就是典型的接口角色划分不清的问题,把不同角色的功能堆放在一起,违反了角色分离原则。

改进:对该接口进行我角色划分,拆分成:搜索器角色,索引生成器角色,搜索结果集角色;明确各个角色的职能范围。

搜索器角色 Searcher 返回一个 ResultSet 对象,Searcher 与 ResultSet 是依赖聚合的关系。

接口隔离原则设计示例

更多内容请访问:IT源点

相关文章推荐

全部评论: 0

    我有话说: