在复杂应用中使用上下文传递参数

最近在接手老唐的结算任务部分代码,代码的复杂程度本来已经有心理准备,但是等把代码拿到手并仔细看进去后才发现我的心理准备是那么的脆弱。。。

 

且不说老唐为这份代码准备的流程图,两个核心大流程,两个核心流程中的核心功能块,这里也不打算对具体业务流程做介绍,只用一幅流程图来说明其复杂程度(该流程图只描述了部分核心流程)

部分流程

 

由于几乎图上每个流程框都是一个非常复杂的方法,并且还分布在不同的类当中,这就牵扯出一个问题,当前计算的数据保存在哪?或许这个问题还比较抽象,具体到一个实际的例子吧。在对某商品的购买记录做结算、分成时不能对每个订单都存一遍结算、分成数据,而是要将结算结果累加到一起后再做分成,等把所有商品遍历完了后再统一调用支付宝接口进行转账。那么在这个过程中,如果记录累计的结算、分成,以及支付宝接口调用的数据呢?下面是一个简单的内存数据结构草图

内存数据结构草图

其中SettleDetailMap是一个以商品id做主键的HashMap,用于记录不同商品的结算数据,也就是SettleDetailContext了,这个SettleDetailContext是一个复杂类型的数据对象,里面放有累计结算金额,支付宝转账的本地数据,累计分成金额和若干控制程序扭转的标志参数等,这样对不同商品进行结算时就从SettleDetailMap对象中获取该商品的上下文信息,完成结算、分成后,将金额累加到对应SettleDetailContext的子对象中。。。等到所有商品的订购信息都被结算完了,最后才遍历SettleDetailMap,完成支付宝转账等操作。

 

上面简单介绍了上下文在结算系统中的应用,当然实际情况比这个上面描述的复杂的多,但是终究思想就是把所有数据按某一个原则划分(如appid),然后在内存中保留所有待处理的数据对象,并在需要的时候取出。

 

思考:

记得一个前辈曾经说过,如果一个系统的实现代码异常复杂,那么设计一定出了问题。的确,别的不说,就这套代码的上手难易程度来看,绝对属于S+级,业务流程还可以用普通流程图描述,内存数据的变换那真是完全无法描述了,我很多时候都是靠debug看内存状态来理解其内存数据的变换的,那么是否有好的办法来理解、描述这种复杂的内部数据场景呢?真的只能靠上下文的传递吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值