作者:小傅哥
博客:https://bugstack.cn
沉淀、分享、成长,让自己和他人都能有所收获!😄
大家好,我是技术UP主小傅哥。
我想做一个抽奖,但想让用户合理的别中奖。现在各个互联网产品场景中,都有抽奖模块来拉新促活,如;平台签到积分抽奖、商城支付完成抽奖、打车优惠发券抽奖,你以为的是抽奖,但大部分都是借着抽奖的外壳消耗你的积分和定向发放消费券。
你以为你玩的是抽奖,但其实玩的是你对人性的理解!这也是营销中最复杂的产品运营设定,既要让用户玩的开心,又有让平台有的赚。所以纵横交错逻辑功能实现的营销组也是各个互联网公司中代码实现度最复杂的组。
接下来,就带着兄弟们做一款复杂的抽奖场景领域和库表设计!—— 所以,兄弟们👬🏻不是某个系统烂大街,烂大街的是写不出好工程代码的CRUD!
一、产品场景
积分,积累积分兑换商品,是各个互联网中场景都有的一个产品系统用于沉淀用户。你的积分积累可以在系统内循环完成抽奖、兑换、抵扣,但随着产品运营的时间越长,就会发现越来越多的人攒积分,导致通货膨胀。这就有点像我们很多人攒钱不花不消费一样,导致越少攒钱的人,钱越来越不值钱。所以也要发一些消费券,让我们的钱流动起来。
那么,这样的情况在互联网场景中,则会通过抽奖活动的方式,来消耗你的积分积累。普通的抽奖当然很难消耗鬼精的用户积分,所以要设定一些规则玩法通过你不断的抽奖来消耗积分。【如图】
展示给你的是抽奖,没展示给你的全是手段!
- 首次,免费抽奖,可设定抽奖范围。让你第一次抽奖超过62.9%,甚至达到99%全是随机积分,而这个随机的积分有时候恰好够你消耗所剩积分完成一次抽奖。
- 而后,随机积分,也是远小于所需抽奖的积分,目的就是为了消耗你的积分值。100积分,最后得到20积分。类似斗地主每把都有入场费。
- 再有,增加的大奖抽奖,必须用户抽奖n次后解锁。都抽奖1次了,再来2次就解锁了。这个时候你就忘记了自己要赞积分,指向点下10连抽。
- 最后,再有一个6000积分消耗必中奖策略,让用户知道反正最后会得到一次非积分的奖品,赶紧梭哈!
这些,还只是你表面能看见了的,看不见的还有一些配置的手段。比如你是个老羊毛用户,那么你的抽奖根本就是个摆设,你能得到的奖品都是风控兜底,比如100积分,抽到1积分。
这还只是大营销中的一个抽奖场景,就已经这么复杂,可想而知整个营销下的;券、裂变、分销、活动、返利、人群、灌券、出资、结算有多复杂。产品玩的花,研发苦哈哈。就这种场景如果你都是 if···else
那你每天就别下班了,半夜都的被电话打起来改bug!
二、领域模型
这样的复杂系统非常适合使用 DDD 进行领域建模设计,通过领域的拆解分析得到所需开发的各项功能领域。通过这样的手段,也能更好的管理后续需求的迭代。
- 首先,以用户所在营销场景的生命旅程为链路,分析出所需的核心领域模型。
- 之后,拆解的模型包含;活动领域、活动库存、用户参与领域、抽奖策略领域、子领域规则、活动账户、奖品领域和积分账户领域。
- 最后,依照于领域模型来设计具体功能。这里我们先聚焦到抽奖策略模型中,通过对产品功能的分析,完成领域功能理解和库表的设计。
三、流程设计
复杂的抽奖产品,也会对应着复杂的设计。而这些设计的细节才是研发的核心知识,无论你是在做此类功能还是说面试,都是希望能思考到这些场景对应的实现手段。与之相比纯CRUD是啥设计呢,我来给兄弟们对比看下。
1. 简单设计 - 市面上的开源抽奖
2. 复杂设计 - 小傅哥设计的抽奖
可以这么说,小傅哥给你做的场景设定、领域建模、流程设计,以及对应的代码开发,都是以互联网应用级项目所做的。所以你学习到这类细节贼多的知识,面试的时候是非常有的讲的,而且你还能把一些算法结合进去。那么这么整不是嘎嘎强,嘎嘎乱杀吗!https://gaga.plus
四、库表设计
关于抽奖策略这部分会涉及到4张表,包括;策略表、策略规则表、策略奖品、奖品表,【如图】
DDD 开发会通过领域建模驱动着功能的设计实现,但实现的细节思考会有对应数据结构的使用。而这些数据结构则会体现到库表中,所有好的库表设计,可以让领域功能的实现更加细腻灵活。那么你看到这里的库表字段则会涉及这对应的流程的设计实现,尤其是多种类型的设计,更是编码中设计原则、设计模式的体现。
项目地址:https://gaga.plus