DDD概念复杂难懂,实际落地如何设计代码实现模型?

今天我想与你聊一聊,DDD概念复杂、难懂,实际落地该怎么设计代码实现模型。关于这个话题,先说说整体框架、思路,我打算结合两部分分享给你,每一部分,相信仔细看完,都会或多或少有所收获。以下内容,预计1分钟左右可快速看完:

前一部分,方法篇,旨在详细介绍DDD所包含的几个核心概念,以及围绕这些概念所构建的DDD代码实现模型的组成结构。

后半部分,实践篇,进一步思考。我继续接着说,承接前面的内容,要想让这些代码实现模型真正落地,我们需要把它们与具体的应用场景结合起来。我将侧重详细阐述DDD代码实现模型的设计方法,并给出一个具体的案例分析。

伴随着业务系统复杂度的不断提升,以及微服务架构等分布式技术体系的大行其道,领域驱动设计(Domain Driven Design,DDD),日渐成为系统建模领域的主流设计思想和模式。在DDD中,引入了限界上下文、聚合、实体、值对象、领域事件、资源库、应用服务等一系列核心概念。

通过这些概念,开发人员可以开展系统设计和实现工作。但是,DDD中的这些概念相对都比较抽象,甚至有些晦涩难懂。再往相通或类似问题点上靠,我认为实质上对于复杂难懂的概念的理解和把握,我们一开始不必过于纠结这些概念本身,而是可以把它们与现实中的具体实现模型对应起来。

通过两者之间的合理映射,来促进对概念本身的理解,如下图所示。这里多说一句,即便你是其他技术领域的朋友,或许也曾遇到过类似问题,并有着共通性。希望看完今天的分享,可以或多或少帮助到你,并有所启发、思考。

在上图中,我们一方面尝试把复杂概念映射到实现模型。另一方面,基于对实现模型的把握,可以反推对复杂概念的理解程度,从而更好地掌握这些概念。这也更足以见得实践才能出真知,也只有设计过实现模型,才能真正掌握这些概念,从而把它们应用到各种具体的场景中。

这是一种行之有效的办法。

那么问题就来了,在日常开发过程中,如何确保DDD真正落地,把这些抽象概念转为具体代码模式,是我们今天要讨论的内容。

01⎪

想设计代码实现模型,咱非得了解DDD中这几个核心概念?

总体来说,DDD提供的是一种开展业务建模和软件设计的方法论。DDD认为良好的系统架构,应该是技术架构和业务架构相互融合的结果,开发人员不能脱离业务领域来设计技术架构。为了实现这一目标,DDD提出了一组核心概念,如图1所示。

我们先来看第一个核心概念,就比较难于理解,即限界上下文(Boundary Context)。在DDD中,当我们把业务领域拆分成多个子域之后,限界上下文明确了子域的业务界限,并实现子域与子域之间的隔离,如图2所示。

有了限界上下文,我们就需要围绕业务场景设计领域模型对象(Domain Model Object)。领域模型对象,包含了丰富的业务逻辑和操作行为,这点和只包含数据属性的传统数据对象,有本质区别。

因此,领域模型对象是我们在应用DDD时,最应该关注的一组对象,也是最难把握的一组对象。

在DDD中,领域模型对象包括三大类,即聚合(Aggregate)、实体(Entity)和值对象(Value Object),这三类对象各有特点。

相较领域模型对象,领域事件诞生较晚,但也是领域模型的一个重要组成部分,因为现实中很多场景,都可以抽象成事件(Event),如图4。

在DDD中,通过领域事件可以实现业务状态变化的有效传播,并在单个限界上下文内部或在多个上下文之间,对这些状态变化做出响应。

业务领域中的各种状态变化最终都需要进行存储。为此,DDD提供了一个针对业务数据的统一访问入口,这就是资源库(Repository)。通过资源库,我们可以实现对各种领域对象的持久化操作,如图5所示。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值