`

ddd之聚合

    博客分类:
  • ddd
 
阅读更多
聚合是一个用来定义对象所有权和边界的领域模式。

来自模型的挑战是通常不让它们尽量完整,而是让它们尽量地简单和容易理解

关联的数字应该被尽可能消减。首先,要删除模型中非本质的关联关系。它们可能在领域
中是存在的,但它们在我们的模型中不是必要的,所以我们要清除它们。其次,可以通过增加约束的方式来消减多重性。如果很多对象满足一种关系,那么在这个关系上加入正确的约束后,很有可能只有一个对象会继续满足这种关系。第三,很多时候双向关联可以被转换成非双向的关联。

不变量是在数据发生变化时必须维护的那些规则。这在许多对象与数据发生变化的对象保持引用时更难实现。

聚合是针对数据变化可以考虑成一个单元的一组相关的对象。聚合使用边界将内部和外部的对象划分开来。每个聚合有一个根。这个根是一个实体,并且它是外部可以访问的唯一的对象。根可以保持对任意聚合对象的引用,并且其他的对象可以持有任意其他的对象,但一个外部对象只能持有根对象的引用。如果边界内有其他的实体,那些实体的标识符是本地化的,只在聚合内有意义。

聚合是如何保持数据一致性和强化不变量的呢?因为其他对象只能持有根对象的引用,这意味着它们不能直接变更聚合内的其他的对象。它们所能做的就是对根进行变更,或者让根来执行某些活动。根能够变更其他的对象,但这是聚合内包含的操作,并且它是可控的。如果根从内存中被删除或者移除,聚合内的其他所有的对象也将被删除,因为再不会有其他的对象持有它们当中的任何一个了。当针对根对象的修改间接影响到聚合内的其他的对象,强化不变量变得简单了,因为根将做这件事情。如果外部对象能直接访问内部对象并且变更它们时,这将变得越发困难。在这种情况下想强化不变量意味着讲某些逻辑放到外部对象中去处理,这不是我们所期望的。

根对象可能将内部的临时引用传递给外部对象,作为限制,当操作完成后,外部对象不能再持有这个引用。一个简单的实现方式是向外部对象传递一个值对象的拷贝。在这个对象上发生了什么将不再重要,因为它不会以任何方式影响到聚合的一致性。

如果聚合对象被保存到数据库中,只有根可以通过查询来获得。其他的对象只能通过导航关联来获得。

聚合内的对象可以被允许持有对其他聚合的根的引用。

根实体拥有全局的标识符,并且有责任管理不变量。内部的实体拥有内部的标识符。
分享到:
评论

相关推荐

    【推荐】张逸-DDD聚合工作坊

    【推荐】张逸-DDD聚合工作坊是一份深入探讨领域驱动设计(Domain-Driven Design,简称DDD)的专题资料,由知名专家张逸在IAS2019演讲中分享。这份29页的PDF文件是关于如何有效地运用DDD方法论进行软件开发的实践指导...

    【精品】领域驱动DDD聚合工作坊19.9.pdf

    领域驱动设计(DDD)聚合知识点 领域驱动设计(DDD)是一种软件开发方法学,旨在帮助开发者更好地理解业务领域,设计出更加符合业务需求的软件系统。在 DDD 中,聚合(Aggregate)是指一个对象图的边界,用于定义...

    DDD领域设计模式代码案例

    2. **聚合**:聚合是DDD中的一个关键概念,它是一组相关对象的集合,有一个根元素,即聚合根,其他对象被称为聚合内的实体或值对象。聚合保持其内部的一致性,对外界提供统一的访问接口。例如,在订单管理中,订单是...

    Akka.DDD:Akka 中的 DDD 示例 - 其中聚合根是 Actor

    阿卡驱动程序Akka 中的 DDD 示例 - 其中聚合根是 Actor 领域驱动设计是一种用您的业务领域的语言编写应用程序逻辑的方法。 DDD 依赖于聚合根的概念,它定义了一个一致性边界,它接受命令并发布事件。 聚合之间的通信...

    DDD分层架构参考代码目录结构

    《DDD分层架构及其在微服务中的应用》 DDD(Domain-Driven Design,领域驱动设计)是一种软件开发方法,强调以业务领域为中心进行系统设计。其分层架构模型是DDD的核心设计模式,它将系统分为用户接口层、应用层、...

    使用Spring Data JDBC实现DDD聚合的示例代码

    使用Spring Data JDBC实现DDD聚合的示例代码 以下是使用Spring Data JDBC实现DDD聚合的示例代码的知识点总结: 标题解析 使用Spring Data JDBC实现DDD聚合的示例代码,主要介绍了使用Spring Data JDBC实现DDD...

    DDD 微服务落地实战视频教程

    《DDD 微服务落地实战视频教程》是一套全面解析领域驱动设计(Domain-Driven Design,简称DDD)在微服务架构中的应用的课程。这套教程共包含21个章节,旨在帮助学习者从理论基础到实战技能,逐步掌握如何在实际项目...

    大白话领域驱动设计DDD视频教程

    聚合和聚合根是什么? 领域事件是什么? 看看领域事件的本质(解耦,异步,削峰) 工厂和资源库的作用? 领域服务是什么? 通过用例分析法和领域事件梳理电商购物车核心流程 第4章 DDD进阶篇 DDD面向对象分析方法、...

    DDD领域驱动设计学习框架简介PPT

    领域模型是DDD的核心元素,它包含了业务实体、值对象、聚合根、领域事件等概念。领域实体是对业务实体的抽象,具有唯一标识;值对象关注的是属性的集合,不关心身份;聚合根是领域模型中的一组相关对象,它们作为一...

    实现领域驱动设计(DDD之父作序力荐 让DDD思想真正落地的首创巨著)

    《实现领域驱动设计》共分为14 章,在DDD 战略部分,《实现领域驱动设计》向我们讲解了领域、限界上下文、上下文映射图和架构等内容,战术部分包括实体、值对象、领域服务、领域事件、聚合和资源库等内容。...

    单纯的DDD代码

    1. **领域模型(Domain Model)**:这是DDD的核心,它由领域对象(如实体、值对象、聚合根等)组成,用来表示业务规则和业务状态。例如,一个电子商务项目中的订单、商品、用户都可以视为领域模型的一部分。 2. **...

    2-DDD的庖丁解牛之道(V1.5)——王立.pdf

    《DDD的庖丁解牛之道(V1.5)》这篇文章深入探讨了领域驱动设计(DDD)的应用实践,并通过具体的案例分享了如何通过DDD改善沟通需求、强化系统分析和变革实现方法。DDD是一种将业务知识模型化并与软件设计紧密对接的...

    领域驱动模型(DDD).zip_ddd_领域模型_领域驱动_领域驱动设计

    领域驱动设计(Domain-Driven Design,简称DDD)是一种软件开发方法,它强调通过深入理解和建模业务领域来驱动软件的设计和开发。DDD的核心思想是将复杂的业务逻辑转化为可操作的软件模型,以此来提高软件的可维护性...

    领域驱动聚合设计工作坊

    领域驱动设计(DDD)是一种软件开发方法,它强调通过深入理解和建模业务领域来创建复杂的软件系统。在DDD中,聚合是一种重要的设计模式...工作坊提供的案例和演练有助于加深对DDD聚合设计的理解,为实际项目提供指导。

    基于DDD和微服务中台架构与实现

    - "聚合"是DDD中的核心设计单元,包含一组相关对象,确保业务规则的一致性。 - "事件"和"事务一致性"用于处理业务流程中的异步通信和状态同步。 2. **微服务架构**: - 微服务架构将大型应用分解为一组小型、...

    DDD领域驱动设计day01.pdf

    - 第二天关注DDD实践篇,讲解如何基于领域模型进行数据库和程序设计,以及如何设计聚合、工厂和仓库。 - 第三天聚焦DDD架构篇,讨论如何构建支持领域驱动设计的技术中台和微服务架构,以及通过整洁架构支持技术架构...

    DDD项目实例

    **DDD(领域驱动设计)**是一种先进的软件开发方法论,主要应用于复杂的业务系统设计,它强调将业务逻辑和规则转化为可执行的代码。在.NET框架下,DDD可以帮助开发者更好地理解和组织复杂的业务领域,通过清晰的边界...

    基于DDD领域驱动设计通用后台权限系统开发

    **基于DDD领域驱动设计通用后台权限系统开发** 领域驱动设计(Domain-Driven Design,简称DDD)是一种软件开发方法,强调以业务领域为中心进行系统设计,将复杂的业务逻辑转化为清晰的模型。在“基于DDD领域驱动...

    C#-DDD领域驱动设计-曹建

    《C#-DDD领域驱动设计-曹建》是关于使用C#编程语言实践领域驱动设计(Domain-Driven Design,简称DDD)的一个项目。领域驱动设计是一种软件开发方法,它强调以业务领域为中心进行软件设计,将复杂的业务逻辑转化为可...

Global site tag (gtag.js) - Google Analytics