文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

一篇带给你DDD领域建模实战

2024-12-02 03:35

关注

大家好,欢迎来到Tlog4J课堂,我是Jensen。

今天给大家分享一篇DDD领域建模实战,结合我个人三年来的DDD实践经验,以企业级电商项目DDD领域设计为出发点,希望能给到大家对DDD的一些启发。

我会从DDD领域分析、DDD设计呈现、领域建模实际案例来展开说明,后面会有彩蛋给到大家~

话不多说,咱们开始DDD之旅吧~

DDD领域分析

讲DDD之前,咱们得了解一些基本概念,大家都知道DDD指的是领域驱动设计(Domain-Driven Design),那怎么理解DDD呢?

DDD是一个事件风暴(分类划分),进而知道组织划分(中台)、系统划分(微服务)、代码划分/设计的思想方法。

这么理解可能比较抽象,其实它的本质就是:通过将复杂问题简单化,分而治之,降低复杂度。

DDD的出现,契合了当今流行的微服务架构,微服务架构有个特别重要的命题——如何合理划分微服务,而DDD的战略设计完全可以作为微服务划分的依据。

我们讲DDD,它其实是包括了战略设计和战术设计,那他俩有啥区别呢?

这两者谁更重要呢?我认为,战略设计比战术设计更加重要。

在实际生产中,业务会越来越复杂,代码也会越垒越庞大,如果业务没有经过划分,表设计也没有经过划分设计,最后系统将变成一个庞大的单体应用,叠加需求修改代码的时候将会牵一发而动全身。

如果业务经过战略设计合理去划分,每个业务的业务边界会显得特别清晰,即使我们的代码没有使用DDD的思想去完成搭建,即使我们还是使用传统的MVC架构,也不会影响业务正常运作,战略设计是连接产品需求与开发代码的一道桥梁。

那领域驱动的战略设计应该如何分析呢?我们不需要独自去摸索,总结前辈的一些经验即可:

那么,领域驱动战术设计应该如何落地呢?我认为,考虑两个大方向即可:

至此,我们了解清楚了DDD的一些基本概念,那DDD为什么对我们如此重要呢?

我认为,DDD可以指导我们业务设计,指导我们代码落地,使得维护变得更简单。

DDD指导设计:

DDD指导落地:

简易维护:

这就是DDD对我们的重要意义,我们不能只以开发视角去看待业务问题,那样的话就会陷入开发思维陷阱,这对我们的业务成长没有任何帮助。

接下来,咱们来回顾一下,DDD有哪些核心要素——

领域(Domain)

领域是指在特定的范围或边界内要解决的业务问题域,它的核心思想是将业务问题域逐级细为子域/核心域/通用域/支撑域,降低业务理解和系统实现的复杂度。

聚合(Aggregate)

聚合内包括聚合根、实体、值对象,DDD中的聚合是不等同于UML中的聚合的,我们使用充血模型设计领域模型的属性、行为,并识别聚合与聚合根。

值得注意的是,一个微服务最小不要小于一个聚合,避免引入分布式事务的复杂度。

限界上下文(Bounded Context,简称BC)

业务的通用语言有它的业务边界,我们不大可能用一个简单的术语没有歧义地去描述一个复杂的业务领域,BC就是用来细分领域,从而定义通用语言所在的边界。

BC包含一个或多个聚合,按业务领域概念划分到不同BC,对应Java代码层面就是顶层包目录结构。

BC之内高内聚,一个业务行为在BC内尽量使用线程级别的交互,以保证ACID;BC之间低耦合,可作为微服务设计和拆分的依据,当然,微服务的拆分粒度还需要结合企业运维的能力。

BC之间最好采用领域事件进行交互,或者引入“翻译器”(或者说防腐层)进行通讯,保持BC间的松耦合。

DDD的核心要素就这三个,搞懂这三个要素,咱们就可以开始搞很多事情了。

当然,领域建模的一些难点咱们也要有所了解,比如:

DDD设计呈现之——四色建模

在我们接到需求的时候,会在脑子里把实现的代码过一遍,这对于简单的CRUD来说并不难,但是涉及到更复杂的业务,一个场景就够我们沟通很久才能说清楚,那怎么办呢?

其实很简单,我们需要一个载体,去把思考的过程沉淀下来,等到产品经理来找我们加需求评估影响范围的时候,新人入职给他讲解业务的时候,通过这个载体就能直观地呈现出来,这就是DDD设计呈现的魅力所在。

这里我以我个人用得比较顺手的四色建模法作为DDD的设计呈现。

四色建模法是对领域模型的一种分析方法论,关注点是领域模型的归类,它是一种呈现方法。

四色原型延生于90年代,最先由Peter Coad和Mark Mayfield提出[Coad92],然后由David North拓展[Coad95-97],是一种被广泛使用的系统分析方法。

使用四色建模法设计出来的四色图,它所表达的类图是一种包含顺序图的完全动态图,它是立体多维的,有异于完全静态的数据库ER图。

那四色原型具体是哪四色呢?我们一起来看看:

时标原型(Moment-Interval Archetype,简称MI)

表示事物在某个时刻或某一段时间内发生的,如销售订单、客户账单、收款记录等,使用浅红色表示。

PPT原型(Part-Place-Thing Archetype,人/事/物原型,简称PPT)

表示参与扮演不同角色的人或事物,如商品、账户、店铺等,使用浅绿色表示。

角色原型(Role Archetype,简称ROLE)

抽象了一种参与方式,由人或组织机构、地点或物品来承担,如客户、商家、仓储团队、财务组织等,使用浅黄色表示。

描述原型(Description Archetype,简称DESC)

属于资料类型的资源、目录式的种类性质对象,或者可以被其他原型反复使用的,如商品类目、支付方式、方法值对象等,使用浅蓝色表示。

接下来,咱们使用四色建模法来分析领域模型,总共分为四大步:

  1. 建立时标原型:寻找需要追溯的事件,根据追溯事件寻找足迹。
  2. 建立PPT原型:丰富模型,寻找时标原型周围的人/事/物,使它可以更好地描述业务概念。
  3. 建立角色原型:进一步从中抽象出可以参与到不同流程中去的角色。
  4. 建立描述原型:把一些信息用描述对象补足。

这里咱们需要注意的是,整个过程会穿插着原型之间关系/核心交互的标注,我们来看一幅电商DDD的四色图案例:

领域建模实际案例

如下图所示,这是财务领域模型和支付中心模型的一部分,这里只描述了业务系统是如何运作起来的,并没有涉及表的具体字段设计,全量的模型图因涉及敏感信息不作详细展示:

领域建模就是这么个建模,这里我提一些设计细节:

领域模型图就像代码一样,需要我们长期去维护的,不是说做完设计就不去管了,这一点很重要,微服务负责人一定要有这个意识。

关于DCI建模和DCI架构我会继续深入研究,DCI这块就留到下次再分享叭~

彩蛋!

分享一个Pro****On在线画图平台永久白嫖使用的方法:

  1. 首先买个一年的Pro****On个人会员(159元/年)。
  2. 建一个备用的文件夹,里面放各种类型的图。
  3. 等到会员过期后,你还需要建新图的话,就从备用文件夹里移出来修改使用即可。

我个人一直都在使用Pro****On在线画图平台,因为它可以画脑图和各种UML图,支持在线协作,也支持在线图片嵌入站外(如WIKI)。

当然,它还是一个学习设计的比较开放的平台,你可以去它的海量模板库克隆别人的图,看看别人是怎么做软件设计的,你也可以把自己画得贼6的图付费发布出去,体验一下知识变现的乐趣,记得要脱敏哦~

好了,这次的DDD领域建模实战课就到这里,你学会(fei)了吗?

来源:今日头条内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯