这是一个非常正常的接口请求吧,你们觉得这样的设计有问题吗?应该是没啥问题的,这能有什么问题?大致上看是没有什么问题的,问题在于你是怎么看待这个问题。
我来举个例子:获取用户信息的时候需要调用三个接口,分别是:用户基础信息接口、用户当前积分接口、用户收货地址接口,也就是是说,用户就为了看一个个人信息接口就得同时调用这三个或者更多的接口,由于网络是存在不稳定性的,这三个接口的响应时间可能在几十到几百毫秒返回了,也有可能是好几秒之后才返回的,所以,这会让用户感觉到系统的体验很不友好,所以这个时候门面模式就出来了。
上面这幅图就是通过门面模式进行重构之后的流程,将原来需要请求的三个接口封装到了一个接口中,由接口0统一进行处理,将数据返回给调用方。
为什么要使用门面模式?
==========================================================================
上面的案例中,浏览器需要调用三个接口才能拿到用户想要的信息,会浪费大量的网络请求,如果大部门的时间都消耗在网络请求
《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》
【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享
上,那么性能自然收到了影响,所以,我们需要将一些有关联的接口封装到一个对面的接口中,这样,调用方只需要花费一次网络请求就能拿到他需要的所有数据。
这个时候你可能会有疑惑了,那我把所有的接口都通过门面模式进行一次封装,这样就能间接的提升程序的性能,这种想法是有问题的,如果将一些管联性不强的接口也封装起来,这样可能会适得其反。
那什么时候使用门面模式呢?下面我来介绍几种门面模式的应用场景。
门面模式应用场景
=======================================================================
1。为了解决易用性问题: linux系统大家都用过吧,那对shell脚本应该有一点了解吧,它封装了linux底层的函数,暴漏给用户的命令都是一些容易理解的命令,其实它也相当于一个门面。
linux实现一个查找内存使用情况的命令可能相当的复杂,但是我们在linux系统上只需要输入:free -h 就能查看到详细的信息,这就是shell的功劳,简化了我们的操作,所以当我们想要让接口的调用变得更加简单的时候,可以尝试使用门面模式哦。
2.解决性能问题: 它为什么能解决性能问题,在最上面的例子中已经说明了,这里就不再重复了。
3.解决分布式事务问题: 分布式事务一直都是让开发者十分头痛的一个问题,比如一个用户买了商品,既要扣钱,又要生成订单,还要增加积分,但是用户系统、订单系统、积分系统都是属于单独的子系统,这个时候如果想保证他们要么同时成功,要么同时失败,是相当麻烦的,要么引入分布式事务插件、要么进行事后补偿机制,但是这两种实现起来都不是容易的事情,但是利用门面模式那就是两外一个故事了,我们只需要在一个新的子系统中,将这三个操作放到一个请求中就可以了哦,利用spring事务或者数据库事务,让他们在同一个方法中执行者三条sql,就能保证事务的一致性了。
总结
应用场景说的差不多了,下面我们一起来总结一下。
一个系统设计的好不好,从接口就能看的出来,如果一个接口设计的好,那么系统自然差不了,如果接口设计的自己都看不懂了,你觉得这个系统还会有人使用吗?



