作者:小傅哥 博客:https://bugstack.cn 沉淀、分享、成长,让自己和他人都能有所收获!😄 大家好,我是技术UP主小傅哥。 👨🏻?💻 经过5.1假期的一顿框框输出,终于完成了《大营销项目》第二阶段的开发和上线,体验地址:
作者:小傅哥
博客:
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 非常好的资料,其中一个是关于事件风暴的,讲解了执行战略设计中风暴模型的步骤。
有了这基础认知,接下来我们通过《大营销项目》从需求到设计,一步步了解系统的领域驱动设计。
如图,是一个复杂的营销抽奖场景玩法需求,涵盖了;
活动配置
、
签到&奖励
、
活动账户
、
抽奖策略「责任链+规则树」
、
库存扣减
、
抽奖满N次后阶梯抽奖
等。面对这样的复杂系统,非常适合使用 DDD 落地。
分析需求;
依照于产品需求,在产品的 PRD 文档中还会绘制出业务流程图。产品的流程图会比较粗一些,研发后期需要根据产品的 PRD 文档做具体的设计。
如果首次承接的是一个新的系统,还需要对系统进行架构设计,是单体架构还是分布式架构,以及所要用到的技术栈。最好在提供好相关的落地案例和DDD脚手架。—— 没有这些东西,就想说点理论,就让团队用DDD写代码,那就是天方夜谭! 你都没写出DDD代码,兄弟??哪里去复制!
资料 :—— 详细介绍了 DDD 落地的案例和通用的脚手架。
不少伙伴,都讲过不知道怎么开始 DDD,主要是拿到一个需求,不知道从哪下手,也不知道那些领域的模型是怎么弄出来的。好,这次小傅哥就给你整个完整的案例,告诉你如何开始。
根据业务需求画系统用例图;
在使用 DDD 的标准对系统建模前,一堆人要先了解 DDD 的操作手段,这样才能让产品、研发、测试、运营等了解业务的伙伴,都能在同一个语言下完成系统建模。
????敲黑板 综上,左下角的示意图。就是一个用户,通过一个策略命令,使用领域对象,通过业务流程,完成2个领域事件,调用1次外部接口个过程。我们在整个 DDD 建模过程中,就是在寻找这些节点。
接下来,大量的时间,都是在挖掘领域事件。这个过程就是一堆人头脑风暴的过程,避免错失流程节点。
在确定了领域事件以后,接下来要做的就是通过决策命令串联领域事件,并填充上所需要的领域对象。这块的操作,新手可以分开处理,如先给领域事件添加决策命令、执行用户和领域对象,最后在串联流程。就像
事件风暴定义
中的示意一样。
有了识别出来的领域角色的流程,就可以非常容易的划分出领域边界了。先在事件风暴图上圈出领域边界,之后在单独提供领域划分。
DDD 的战略设计做完,划分出领域边界以后。接下来就是要执行战术和战役了。也就是在工程中做编码实现。但一定要懂得设计原则和设计模式,否则写不出好的代码的。