主页

索引

模块索引

搜索页面

Facade-门面模式

备注

provides a simplified interface to a large body of code. Provide a unified interface to a set of interfaces in a subsystem. Facade Pattern defines a higher-level interface that makes the subsystem easier to use.门面模式让子系统更加易用

接口设计的好坏,直接影响到类、模块、系统是否好用。所以,我们要多花点心思在接口设计上。我经常说,完成接口设计,就相当于完成了一半的开发任务。只要接口设计得好,那代码就差不到哪里去。

应用场景

  1. 解决易用性问题:

    封装系统的底层实现,隐藏系统的复杂性,提供一组更加简单易用、更高层的接口。
    
    从隐藏实现复杂性,提供更易用接口这个意图来看,
    门面模式有点类似之前讲到的迪米特法则(最少知识原则)和接口隔离原则:
      两个有交互的系统,只暴露有限的必要的接口。
    还有点类似之前提到封装、抽象的设计思想,提供更抽象的接口,封装底层实现细节。
    
  2. 解决性能问题:

    将多个接口调用替换为一个门面接口调用,减少网络通信成本
    
  3. 解决分布式事务问题:

    支持两个接口调用在一个事务中执行,是比较难实现的,这涉及分布式事务问题
    可以通过引入分布式事务框架或者事后补偿的机制来解决,但代码实现都比较复杂
    最简单的解决方案是,利用数据库事务在一个事务中,执行两个 SQL 操作
    这要求两个 SQL 操作要在一个接口中完成
    

与适配器模式对比

适配器是做接口转换,解决的是原接口和目标接口不匹配的问题。
门面模式做接口整合,解决的是多接口调用带来的问题。

从场景看:
  门面模式适用在接口设计方面,解决多接口调用问题
  适配器模式是一种补偿措施,补偿的是接口设计缺陷
从功能看:
  门面模式注重易用性
  适配器模式注重兼容性

主页

索引

模块索引

搜索页面