# 《并发设计模式》第33章-主动对象模式-基于主动对象模式优化社区电商系统

作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)
源码获取地址:https://t.zsxq.com/0dhvFs5oR (opens new window)

沉淀,成长,突破,帮助他人,成就自我。

  • 本章难度:★★☆☆☆
  • 本章重点:初步了解主动模式的应用场景,掌握什么是主动对象模式,重点理解主动对象的核心原理与实际应用场景,并能够结合自身项目实际场景思考如何将主动对象模式灵活应用到自身实际项目中。

大家好,我是冰河~~

主动对象模式在异步模式的基础上进一步分离了方法的调用和方法的执行。如果使用串行模式执行业务逻辑时,可能会存在一些不可避免的问题,此时我们就可以使用主动对象模式,将业务逻辑的请求信息缓存起来,待问题修复后,即可重新发起请求。基于此,我们可以对社区电商项目进一步优化。

# 一、故事背景

整个故事的主人公小菜,也就是我们的菜哥,在为社区电商项目商品添加短链接功能时,出现了访问商品404的问题。随后找老王分析问题所在,并且老王也为其介绍了使用主动对象模式能够解决小菜遇到的问题,不仅如此,老王还为小菜详细介绍了什么是主动对象模式,对主动对象模式的类结构和执行流程进行了详细的介绍。随后,就是要基于主动对象模式来优化社区电商系统了。

# 二、回顾问题

在小菜实现长短链接转换的功能时,采用了串行化的执行方案,根据长链接生成短链接后,就会将长短链接的映射关系存储起来。其实,其实,对于我们后端程序员来说,数据的存储操作,像数据库等等不是任何时刻都是100%高可用的,对于运营来说,按照现有的实现方案来讲,如果运营在发布商品时,存储长短链接映射关系的服务出现问题,轻则无法存储长短链接的映射关系,重则根本无法正常发布商品,如图33-1所示。


对于用户来说。如果用户在浏览商品时,一旦存储长短链接的服务出现问题,那就无法根据短链接正确的查询出长链接。最终造成访问不到资源的问题,如图33-2所示。


# 三、解决思路

对于运营或者商家来说,如果在基于长链接转换成短链接失败,或者存储长短链接的映射关系失败时,提示运营或者商家发布商品失败,但是这种提示对于商家或者运营来说,就非常不友好了。本身为商品资源数据生成短链接从整个流程上来说,对用户就不是非常核心的功能,用户只要能正常访问到商品就行。

此时,如果发布商品时,基于长链接转换短链接失败或者存储长短链接的映射关系失败,可以将请求的信息存储起来,等待故障恢复后,再继续执行长链接转换短链接的逻辑和存储长短链接的映射关系。此时,直接为用户端返回商品资源信息的长链接,后续用户直接根据长链接访问商品即可,这也是一种服务降级的策略,此时对于运营或者商家端来说,系统的执行流程如图33-3所示。

# 查看全文

加入冰河技术 (opens new window)知识星球,解锁完整技术文章与完整代码