大营销抽奖系统,DDD开发要如何建模?

ddd · 浏览次数 : 0

小编点评

**如何开始 DDD?** 1. **绘制用户流程图:** 使用用例图可以清晰地展示系统中不同角色之间的交互关系。 2. **定义领域事件:** 领域事件是描述特定领域事件的描述,包括事件发生的条件和结果。 3. **识别领域角色和对象:** 通过分析业务需求和产品文档,可以确定领域角色和对象。 4. **划分领域边界:** 领域边界是将领域对象和事件细分出来的边界。 5. **进行工程实现:** 根据领域边界,在框架结构中编写代码实现系统。 6. **进行测试和调试:** 在开发过程中,要进行测试和调试,以确保系统按预期工作。 **其他提示:** * 使用简化的命名和格式化代码。 * 使用注释来解释代码。 * 与团队中的其他成员沟通并协作。 * 不要害怕提问。

正文

作者:小傅哥

博客:https://bugstack.cn

沉淀、分享、成长,让自己和他人都能有所收获!😄

大家好,我是技术UP主小傅哥。

👨🏻‍💻 经过5.1假期的一顿框框输出,终于完成了《大营销项目》第二阶段的开发和上线,体验地址:https://gaga.plus 有了这个项目的落地,也终于可以给大家完整的梳理出一套 DDD 落地指引规范。包括;战略、战术、战役,各个阶段都要做什么,怎么做风暴模型和四色建模。有了这套东西参考,小白也能目标明确的做 DDD 项目开发啦!

我一直讲,要先实践,再理论!

编程,偏理科的东西要先上手实践,再做理论理解。因为所有的理论提出,也都是建立有了实践结果后,抽象出来的理论。但你上来就要用理论去反推结果,并不是一件容易的事情。就像不少的 DDD 文章,往往会用一个理论,去讲另外一个理论,这也导致很多没有实践过的小白伙伴,压根不知道讲的是什么。最终觉得 DDD 太难!

所以在近2年的时间里,小傅哥分享了非常多的 DDD 实践内容,包括;DDD 工程结构&脚手架、各项分布式技术栈在 DDD 结构下的使用、DDD 实战项目&小场景训练。这些内容都可以在 bugstack.cn 学习。

接下来,小傅哥会带着你走一遍研发设计评审,讲解 DDD 落地项目的全部过程。

文末有对应本项目的 DDD 工程代码地址,理论 + 代码 + 视频,学的嘎嘎透彻!

一、战略、战术、战役

首先 DDD 是一种软件设计方法,Domain-driven design (DDD) is a major software design approach. 来自维基百科。软件设计方法涵盖了;范式、模型、框架、方法论,主要活动包括建模、测试、工程、开发、部署、维护。来自维基百科的软件设计涵盖信息介绍。

在 DDD 领域驱动设计中,常提到战略战术,和一少部分会讲到战役。这3个词主要讲的是不同的开发阶段所需要完成的事项;

  • 战略 - 建模;领域划分、界限上下文、核心领域
  • 战术 - 架构;工程结构、领域对象、领域服务、领域事件
  • 战役 - 编码;设计原则、设计模式

DDD 的战略、战术和战役设计相辅相成,战略提供系统的建模作为宏观指导,战术下面有N个战役,两者则关注具体的实现和编码落地。

在维基百科中有不少 DDD 非常好的资料,其中一个是关于事件风暴的,讲解了执行战略设计中风暴模型的步骤。

有了这基础认知,接下来我们通过《大营销项目》从需求到设计,一步步了解系统的领域驱动设计。

二、产品需求

1. 产品诉求

如图,是一个复杂的营销抽奖场景玩法需求,涵盖了;活动配置签到&奖励活动账户抽奖策略「责任链+规则树」库存扣减抽奖满N次后阶梯抽奖等。面对这样的复杂系统,非常适合使用 DDD 落地。

分析需求;

  1. 整体概率相加,总和为1或者分值计算,概率范围千分位
  2. 抽奖为免费抽奖次数 + 用户消耗个人积分抽奖
  3. 抽奖活动可给用户分配可抽奖次数,通过点击签到发放
  4. 活动延伸配置用户库存消耗管理,单独提供表配置各类库存
    用户可用总库存、用户可用日库存
  5. 部分抽奖规则,需要抽奖n次后解锁,才能有机会抽取
  6. 抽奖完成增加(运气值/积分值/抽奖次数)记录,让用户获得奖品。
  7. 奖品对接,自身的积分、内部系统的奖品
  8. 随机积分,发给你积分。
  9. 黑名单用户抽奖,则给予固定的奖品。

2. 业务流程

依照于产品需求,在产品的 PRD 文档中还会绘制出业务流程图。产品的流程图会比较粗一些,研发后期需要根据产品的 PRD 文档做具体的设计。

  • 产品经理会详细的介绍整个系统的功能流程和需要对接接口文档。
  • 以上就是以用户旅程为维度,从点击签到获得活动账户额度,再到一些列抽奖、抽奖策略、中奖结果和奖品发放的流程。

三、系统架构

如果首次承接的是一个新的系统,还需要对系统进行架构设计,是单体架构还是分布式架构,以及所要用到的技术栈。最好在提供好相关的落地案例和DDD脚手架。—— 没有这些东西,就想说点理论,就让团队用DDD写代码,那就是天方夜谭!你都没写出DDD代码,兄弟👬🏻哪里去复制!

资料:—— 详细介绍了 DDD 落地的案例和通用的脚手架。

1. 分布式架构

2. 分布式技术

四、战略设计

不少伙伴,都讲过不知道怎么开始 DDD,主要是拿到一个需求,不知道从哪下手,也不知道那些领域的模型是怎么弄出来的。好,这次小傅哥就给你整个完整的案例,告诉你如何开始。

1. 用例图

根据业务需求画系统用例图;

  • 用例图(英语:use case diagram)是用户与系统交互的最简表示形式,展现了用户和与他相关的用例之间的关系。通过用例图,人们可以获知系统不同种类的用户和用例。用例图也经常和其他图表配合使用。
  • 用例图,也可以等同于是用户故事(英语:User story)(软件开发和项目管理中的常用术语),主旨是以日常语言或商务用语撰写句子,是一段简单的功能表述。以客户或使用者的观点撰写下有价值的功能、引导、框架来与使用者进行互动,进而推动工作进程。可以被认为是一种规格文件,但更精确而言,它代表客户的需求与方向。以该用户故事来反应对象在组织内的其工作职责、范围、需要进行的任务等。用户故事在敏捷开发方法中用来定义系统需要提供的功能和实现需求管理。
  • 尽管用例本身会涉及大量细节和各种可能性,用例图却能提纲挈领地让人了解系统概况。它为“系统做什么”提供了简化了的图形表示,因此被誉为“搭建系统的蓝图”。

2. 事件风暴定义

在使用 DDD 的标准对系统建模前,一堆人要先了解 DDD 的操作手段,这样才能让产品、研发、测试、运营等了解业务的伙伴,都能在同一个语言下完成系统建模。

  • 蓝色 - 决策命令,是用户发起的行为动作,如;开始签到、开始抽奖、查看额度等。
  • 黄色 - 领域事件,过去时态描述。如;签到完成、抽奖完成、奖品发放完成。它所阐述的都是这个领域要完成的终态。
  • 粉色 - 外部系统,如你的系统需要调用外部的接口完成流程。
  • 红色 - 业务流程,用于串联决策命令到领域事件,所实现的业务流程。一些简单的场景则直接有决策命令到领域事件就可以了。
  • 绿色 - 只读模型,做一些读取数据的动作,没有写库的操作。
  • 棕色 - 领域对象,每个决策命令的发起,都是含有一个对应的领域对象。

👩🏻‍🏫敲黑板 综上,左下角的示意图。就是一个用户,通过一个策略命令,使用领域对象,通过业务流程,完成2个领域事件,调用1次外部接口个过程。我们在整个 DDD 建模过程中,就是在寻找这些节点。

3. 寻找领域事件

接下来,大量的时间,都是在挖掘领域事件。这个过程就是一堆人头脑风暴的过程,避免错失流程节点。

  • 根据产品 PRD 文档,一起开会梳理有哪些领域事件。其实大多数领域事件一个人都可以想到,只是有些部分小的场景和将来可能产生的事件不一定覆盖全。所以要通过产品、测试、以及团队的架构师,一起讨论。
  • 像是整个大营销的抽奖会包括如图所列举的事件。在列举这个阶段,你用在乎格式。也可以是每个人准备好黄色便签纸,想到一个就贴到黑板上一个,只是穷举完成。—— 实际做DDD中,也是这样用便签纸贴黑板,所以用不同的颜色做区分。

4. 识别领域角色和对象

在确定了领域事件以后,接下来要做的就是通过决策命令串联领域事件,并填充上所需要的领域对象。这块的操作,新手可以分开处理,如先给领域事件添加决策命令、执行用户和领域对象,最后在串联流程。就像 事件风暴定义 中的示意一样。

  • 首先,通过用户的行为动作,也就是决策命令,串联到对应的领域事件上。并对复杂的流程提供出红色的业务流程。
  • 之后,为决策命令添加领域对象,每一个领域在整个流程中都起到了至关重要的作用。

5. 划分领域边界

有了识别出来的领域角色的流程,就可以非常容易的划分出领域边界了。先在事件风暴图上圈出领域边界,之后在单独提供领域划分。

5.1 圈出领域

5.2 领域边界

  • 到这步咱们就可以获得整个项目中 DDD 的领域边界划分了。之后再往下就是具体的每个领域对象的详细设计和流程设计。

6. 研发详细设计

6.1 实体对象

  • 你需要对每一个领域对象进行字段的详细设计。并划分出它们的上下文关系。一般在公司中,这部分设计完成,其他人也能对照你的设计进行代码开发。

6.2 流程设计

  • 流程设计,就是更详细的设计了。每一步要调用到哪个系统,哪个接口,要执行什么动作就全部都有了。

五、工程实现

DDD 的战略设计做完,划分出领域边界以后。接下来就是要执行战术和战役了。也就是在工程中做编码实现。但一定要懂得设计原则和设计模式,否则写不出好的代码的。

  • 工程实现,就是在确定的框架结构中编码。可以是洋葱架构、整洁架构、菱形架构等等。这部分内容的可以通过实战项目来锻炼,获得编码技巧。

与大营销抽奖系统,DDD开发要如何建模?相似的内容:

大营销抽奖系统,DDD开发要如何建模?

作者:小傅哥 博客:https://bugstack.cn 沉淀、分享、成长,让自己和他人都能有所收获! 大家好,我是技术UP主小傅哥。 ‍ 经过5.1假期的一顿框框输出,终于完成了《大营销项目》第二阶段的开发和上线,体验地址:https://gaga.plus 有了这个项目的落地,

618技术揭秘 - 大促弹窗搭投实践

618 大促来了,对于业务团队来说,最重要的事情莫过于各种大促营销。如会场、直播带货、频道内营销等等。而弹窗作为一个极其重要的强触达营销工具,通常用来渲染大促氛围、引流主会场、以及通过频道活动来提升频道复访等。因此,如果能将运营的策略及想法快速转化为弹窗的内容并触达给用户,这对于提升运营效率及玩法灵活性的是极其有意义的。

文心一言,通营销之学,成一家之言,百度人工智能AI大数据模型文心一言Python3.10接入

“文心”取自《文心雕龙》一书的开篇,作者刘勰在书中引述了一个古代典故:春秋时期,鲁国有一位名叫孔文子的大夫,他在学问上非常有造诣,但是他的儿子却不学无术,孔文子非常痛心。 一天,孔文子在山上遇到了一位神仙,神仙告诉他:“你的儿子之所以不学无术,是因为你没有给他灌输文心,让他懂得文学的魅力和意义。”孔

零代码,让业务人员实现应用创造自由

摘要:以汽车营销场景为例,从AppCube零代码和业务大屏入手,帮助开发者更好地理解AppCube低代码和零代码异同点,在实际使用时能更快选取更合适的工具能力,实现应用构建效率最大化。 本文分享自华为云社区《DTT第8期直播回顾 | 零代码,让业务人员实现应用创造自由》,作者:华为云社区精选 。 本

更难、更好、更快、更强:LLM Leaderboard v2 现已发布

摘要 评估和比较大语言模型 (LLMs) 是一项艰巨的任务。我们 RLHF 团队在一年前就意识到了这一点,当时他们试图复现和比较多个已发布模型的结果。这几乎是不可能完成的任务:论文或营销发布中的得分缺乏可复现的代码,有时令人怀疑,大多数情况下只是通过优化的提示或评估设置来尽量提升模型表现。因此,他们

XView 架构升级之路

Xview是由webview框架改造而来的神器,通常用于大促弹窗等营销场景中。但是在实际的开发中使用Xview中常常存在产研效率低、曝光率不高等问题,本文基于此问题,介绍了XView 架构升级方案。

基于阿里云服务实现短信验证码功能

## 前言: 阿里云短信服务是一项基于云计算和大数据技术的企业级短信平台服务。它能够为企业和开发者提供高可用、高性能、高稳定性的短信发送服务,可以快速地将各类业务通知、验证码、营销推广等信息发送给用户。在我们经常登录一些系统或者APP时候,经常会遇到其他登录登录方式——短信验证码登录。这也是我前一段

[转帖]AMD Ryzen 7000系列处理器大降价 7950X和7900X分别降至3999/3299元

https://www.expreview.com/85434.html 此前AMD公布了2022年第三季度业绩,营收为55.65亿美元,同比增长29%,相比上一个季度减少了9.85亿美元。其中客户事业部的营收为10.22亿美元,不到上个季度(21.52亿美元)的一半,同比下降40%,营业亏损了26

[转帖]全球十大模拟IC厂商排名出炉,TI霸主,微芯上榜

https://www.sohu.com/a/232168751_99984320?qq-pf-to=pcqq.c2c 美高森美和安森美 不是一家.. 前天,IC Insights公布了2017年全球10大模拟芯片厂商营收及排名。据IC Insights统计,2017年全球模拟芯片的市场规模为545

C语言指针易混淆知识点总结

指针 定义 指针是一个变量,存储另一个变量的内存地址,它允许直接访问和操作内存中的数据,使得程序能够以更灵活和高效的方式处理数据和内存。 获取变量地址:使用取地址符 &。 访问地址上的数据:使用解引用符 *。 例子1 指针是存储另一个变量地址的变量。通过使用取地址符 & 和解引用符 *,我们可以灵活