红包场景概述

红包业务场景主要用例就2个:发红包和收红包。

红包指的是具备固定数量固定总金额的大红包,每个大红包由固定数量的小红包组成,每个小红包金额一样或者不一样,但所有小红包的金额之和和大红包总金额必须保持一致,红包实际上是一个具备虚拟资金特征的特殊商品。

发红包和收红包实际上是金融商品的交易过程,红包是一种虚拟资金商品,会涉及到用户资金资产,资金资产指的是用户的钱包账户。

发红包过程是,红包发放者从系统虚拟资金中间商那里购买虚拟资金商品也就是红包,并支付红包总金额给系统虚拟资金中间商,然后将购买的红包赠送给目标人群,赠送过程相当于商品发布,目标人群可以是某个人,也可以是某一群人,所以发红包过程涉及到下单,支付、赠送。

收红包过程类似商品的秒杀活动,不一样的是用户不需要支付商品价格,用户点击红包链接,进入抢红包流程,如果抢到红包,直接到系统虚拟资金中间商那里兑换红包面值,系统虚拟资金中间商将面值金额支付给红包受益人;用户每抢到1个红包,就从系统中扣除红包商品的库存,如果库存没了,表示秒杀活动结束了,就直接结束流程。

红包资金账户满足用户发红包和收红包过程中用于红包资金的交易和记账、对账的需求。资金交易是资金从一个账户流向另一个账户的过程,所以资金交易的实现必须要有资金账户的支持,资金账户是资金交易的基本单元。

所以,红包场景可以总结为一个小而美的红包商品交易系统,既有B2B,又有B2C,红包商品发布者和系统虚拟资金中间商之间属于B2B,红包商品发布者和红包收益人之间是B2C。

用四色建模法来分析红包场景业务模型

按照五个步骤来一步一步拆解

第一步:寻找要追溯的事件(桃红色),并识别出“时标对象”**(桃红色)

怎么找呢?以业务事件发生的时间顺序,找出事件和痕迹,其过程呢就是先来讲故事,把故事讲清楚,把故事盘圆了,这里我有2个步骤来讲故事:

第一步先说清楚,谁,在什么时候,在哪里,对(为)谁,做了什么事情?

第二步再确认这个时间里做这些事情,在哪里留下了什么证据?

故事讲清楚了,就来把这些故事落地转换成模型,这里需要一个图形绘制工具,任何可以画图的工具都行,看个人喜好了,哪个用着顺手就用哪个。如果实在不喜欢使用绘图工具,或者还没有顺手的,也可以使用记事本或者mackdown来编写,只要把关键字和流程说明清楚就行,最重要的是1年后自己能看的懂,其他人也能看得懂,哈哈。

好吧,我们就来落地模型:

首先是通过分析需求和业务场景,还原这些业务发生的过程和故事,把业务过程中的关键性事件或者操作,还有这些用户故事留下来的痕迹(比如单据、订单、支付记录等等),然后按照时间顺序把这些事件和痕迹排列起来,形成一个完整的业务场景闭环时间轴。

然后把业务发生的过程中所有发生的事情,绘制成流程图,添加到时间轴上面,来验证时标对象的识别是否正确,业务流程执行的结果是否正确。

下面就红包业务来模型分析,先来讲故事,

过年了,今天是大年30晚,张三想要发红包给自己的外甥和侄子们,为了增加娱乐性,张三准备发送碰运气红包,让侄子们来抢。张三打开红包工具,输入红包金额100元和红包数量3个,点击发送,完成。侄子们看到红包提醒,点击红包连接开始抢红包,侄子张A抢到33元红包,存入张A的电子钱包;侄子张C也抢到45元红包,存入张C的电子钱包;外甥李F也抢到22元红包,存入自己的电子钱包。ok,到目前为止一次正常的红包业务完成。这个故事看起来没什么问题,但对于软件产品经理和架构师来说,故事还没有将清楚,故事只讲了能看到部分,假如张三的侄子和外甥们一起玩耍时,大家想让张C买糖吃,因为张C抢到的红包金额最多,这时候张C不承认,怎么办?那么其他小伙伴就会拿出抢红包的系统记录来对质,张C无话可说乖乖去买糖。这里的系统记录就是我们要找的痕迹,那么架构师就要把看不到的部分也讲清楚,把故事盘圆了,并把故事里所有留下的证据都给分析出来。

那就重新来讲这个故事,张三点击发送之前的故事不变,发送完成之后,加一些情节,把故事圆起来,来讲一件张三点击发送之后发什么的不可知之地的故事,我把这个不可知之地叫红包系统不可知之地,红包系统接收到张三的发红包的请求,首先保存张三发送的红包记录,再去张三的电子钱包里检查余额是否足够,如果余额足够,就把红包金额在张三电子钱包中给扣除,支付给中间红包商户账户,用来购买红包这种虚拟金融产品-红包,购买完成后,将红包秒杀的连接发给侄子们。侄子们抢红包的过程故事也不变,来看看侄子张A点击红包秒杀连接后,发生在不可知之地红包系统的故事,张A点击红包秒杀连接后,不可知之地红包系统接受抢红包请求,红包系统先去检查红包商品库存,如果还有库存,随机挑一个红包,库存减一,并记录收红包信息,

并将这个红包交给中间红包商户,在中间红包商户那里兑换红包金额,然后在中间红包商户账户中扣减红包金额,把红包金额支付给张A,在张A的电子钱包中增加红包金额,完成抢购流程并恭喜张A抢到红包;如果红包商品库存不够,告诉张A未抢到红包。

ok,现在已经把红包业务的正常故事基本讲清楚了,再来讲一下其他可能发生的故事,张三在大年30晚上23.59分发了红包后侄子门有人不知道,没有收红包,到了大年初二,张三收到了红包退款,同样也来说说另一个不可知之地红包后台任务系统里面发生的故事,这个被叫做值守观,值守观里修炼的事情就是发现过期红包并退款给红包发放者。以快和量著称,快指的是能及时发现过期红包并退款,量指的是能同时处理的事情很庞大,好吧YY到之类,言归正传。在值守观里的修炼者仁者在大年初二凌晨0点0分发现张三红包有过期,仁者就把张三过期的红包标记为过期失效,并关闭秒杀活动,然后把过期红包退给红包商户,从红包商户那里兑换红包金额,然后在中间红包商户账户中扣减红包金额,把红包金额退给张三,在张三的电子钱包中增加退回的红包金额,完成后仁者把这件事情记录下来,仁者增加了功力,继续修炼。

ok,现在把整个故事都基本讲清楚了,那我们就来分析模型,把有用的信息筛选出来,按照时间顺序列出来:

发红包

红包发放者用户张三,选择碰运气红包,输入红包数量和金额,发送红包,保存发送红包记录,检查电子钱包账户余额,

余额足够,从电子钱包账户支付红包金额到红包商户,保存支付记录,红包商户发放红包商品,发布红包,创建红包秒杀活动,返回红包秒杀活动链接给张三。

如果余额不足,则返回余额不足的提示信息给张三,终止流程。

image-20190919101422991

收红包

目标用户侄子张A,收到红包链接,点击链接,红包系统检查红包库存,有库存,选择一个红包,保存收红包记录,扣减库存,红包商户账户里扣减红包金额并支付给张A,张A电子钱包增加红包金额,保存收款记录;库存不够,返回未抢到。

image-20190919101620728

红包过期

值守观徒弟仁者发现了张三红包有过期,发起红包退款流程,保存过期红包记录,关闭张三的红包秒杀活动,标记红包过期失效,过期红包退给红包商户,红包商户账户中扣减过期红包金额退款给张三,张三电子钱包中增加退回的红包金额,保存退款记录。

image-20190919101739889

有了这些关键信息,把重要的挑拣出来绘制事件时间轴图,注意不是流程图。

  • 用户1发红包给某个人(或者某群人)
    • 用户1发红包要先从的他的钱包账户中扣除红包所用的金额,所以账户红包扣款记录发生在发红包过程中,是一个“时标对象”,同时更新钱包账户余额,产生余额记录。。
    • 这里的发红包记录也是“时标对象”,也发生在发红包事件中,不发红包就没有发红包记录产生。
    • 在之前的场景分析中已经说明,不论发送哪种类型的红包,用户在发红包时可以选择1个或者多个红包,在发红包业务的结果是产生多个红包,所以红包也是一个“时标对象”。
    • 总之,在发红包业务过程中产生的事件,按时间先后顺序是:扣款记录,发红包记录,红包
  • 用户2收用户1发的红包
    • 在抢红包业务过程:如果抢不到,对于业务来说,什么事情也没发生一样。如果抢到,实际上是对一批红包中选择一个,并记录抢到红包的记录,产生抢红包记录作为“时标对象”,实际上是抢到红包的记录。
    • 抢到红包后,除了要产生抢到红包的记录之外,还要把抢到的红包的金额存入到用户2的钱包账户,那么就产生了红包入账记录,同时更新钱包账户余额,产生余额记录
  • 用户2没收红包(用户1发送的红包有部分没有被抢)超过红包有效时间。
    • 当超过24小时红包没有被用户2查收时,系统会将未被收的红包标记为超时无效红包,并将剩余红包的总金额退回给用户1,会生成红包退款记录

第二步: 整理对象,建立关系,构建核心骨干模型

将时间轴图中的时标性对象抽离出来,建立模型关系,形成模型骨干:

抽离出来的对象:

image-20190919102122721

建立关系:

image-20190919102157839

添加需要的实体并整理关系:

image-20190919102212642

将初级模型分别进行整理,把散化的时标性对象进行抽象和合并,形成新的模型图,下图是把账户部分重新整理抽象:

image-20190919103404588

把红包部分重新整理抽象:

image-20190919103548838

将各个部分整理规整和抽象后的模型合并并重新绘制,形成最终的模型:

image-20190919102514784

第三步:寻找时标对象周围的“人、地、物”[5]**(绿色):

补充谁,在什么时候,在哪里,对(为)谁,做了什么事情?中的谁,在什么时候,在哪里,对(为)谁等信息:

image-20190919102531315

第四步:抽象“角色”[6](黄色):

在模型关系图中添加涉及到的角色,使用黄色图例表示。

(角色存在于实体对象和时标性对象之间,是指实体在业务流程中职责所在。)

image-20190919103007555

第五步:补充“描述”信息[7]**(蓝色):

对各种对象的补充性描述,不如对象的属性等等。

最后再总结一下四色建模法核心方法:

第一步:从业务事件发生的时间顺序,把每一个关键节点和节点发生的事情,关键节点包括可视的和不可视节点,编织成用户故事,然后把故事里发生的事件和故事里留下的证据挑拣出来,按时间顺序排列开,放在时间轴上下两侧,上面放事件,下面放痕迹,绘制出时间流程顺序图,并反复验证和演绎,确保流程正确。

第二步:之后把时间轴上面的图标用绿色标识,下面用粉红色标识,再抹去时间轴和流程线条,删掉动词类图标,留下名词类图标,将剩下的初级模型进行整理合并,建立模型关系。

第三步:增加模型相关的人、事、物等静态性质,配置性质的,或者非事务日志类型的对象。

第四部:添加角色

第五步:添加模型对象属性描述。