在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
外观模式定义外观模式也叫门面模式 外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 适用范围1、解决易用性问题 门面模式可以用来封装系统的底层实现,隐藏系统的复杂性,提供一组更加简单易用、更高层的接口。 2、解决性能问题 我们通过将多个接口调用替换为一个门面接口调用,减少网络通信成本,提高App客户端的响应速度。 假设有一个系统A,提供了a、b、c、d四个接口。系统B完成某个业务功能,需要调用A系统的a、b、d接口。利用门面模式,我们提供一个包裹a、b、d接口调用的门面接口x,给系统B直接使用。 3、解决分布式事务问题 这个直接来个栗子吧 比如我们现在设计微服务,一个用户服务,一个金币服务。每个服务都提供对外的增删查改等操作。现在我们有一个需求,新用户登陆之后送用户金币。简单地调用,肯定是创建一个用户信息,之后调用金币服务给这个用户加金币。当然实际地开发中我们肯定要考虑分布式事务,保障这两个操作肯定能一起成功或失败,不能出现一个成功一个失败的场景。当然我们常规的做法肯定是引入分布式框架,或者补偿的机制来处理。 其实借助于门面模式的思想也是可以处理,我们可以设计一个包裹这两个操作的新接口,让新接口在一个事务中执行两个SQL操作。 代码实现假设有一个系统A,提供了a、b、c、d四个接口。系统B完成某个业务功能,需要调用A系统的a、b、d接口。利用门面模式,我们提供一个包裹a、b、d接口调用的门面接口x,给系统B直接使用。
放一张结构图 优点
缺点
关于接口粒度的思考接口粒度设计得太大,太小都不好。太大会导致接口不可复用,太小会导致接口不易用。在实际的开发中,接口的可复用性和易用性需要“微妙”的权衡。 针对这个问题,王争大佬给出了一个原则,可以作为参考,尽量保持接口的可复用性,但针对特殊情况,允许提供冗余的门面接口,来提供更易用的接口。 参考【文中代码】https://github.com/boilingfrog/design-pattern-learning/tree/master/外观模式
转 https://www.cnblogs.com/ricklz/p/15555295.html |
请发表评论