领域驱动设计DDD与“AGGREGATE、FACTORY和REPOSITORY”是什么关系?

云雾J视界 2025-10-09 17:23:13

AGGREGATE、FACTORY 和 REPOSITORY 是 DDD 中管理领域对象复杂生命周期的三个核心战术模式,它们三位一体,共同协作,将领域模型从概念转化为可工作的软件。

我们可以用一个生动的比喻来理解它们的关系:

想象一个高度组织化的汽车制造厂:

  • AGGREGATE(聚合) 就像一条条装配线。它规定了组装一辆完整的汽车(聚合根)需要哪些零件(实体和值对象),并确保组装过程中的规则(不变条件)被遵守,比如“安装了发动机才能安装变速箱”。它是一个一致性边界
  • FACTORY(工厂) 就像专业的部件组装车间。当装配线需要一台复杂的、组装好的发动机时,它不会自己去收集活塞、曲轴等零件。它会向发动机车间(工厂)下订单,由这个车间专门负责根据蓝图(业务规则)组装出一台合格的发动机。它负责处理复杂的创建逻辑
  • REPOSITORY(仓储) 就像整个工厂的自动化立体仓库。装配线需要一辆半成品汽车时,它不会自己跑到一堆零件里去找。它只需向仓库(仓储)提供订单号(聚合根ID),仓库就会自动将整辆汽车(整个聚合)从货架上取出并送到线上。同样,当汽车组装完成,也是由仓库将其整体存放到指定位置。它提供了全局访问入口持久化抽象

1. DDD 的总体目标

DDD 的核心是通过构建一个反映领域知识的软件模型,来应对业务的复杂性。这个模型不是一堆散乱的概念,而是一个有机的整体,其中对象之间存在着丰富的关联。

这就带来了挑战:

  • 对象关联过于复杂:如何避免遍历所有关联导致性能灾难?
  • 数据一致性:修改一个对象时,哪些关联对象必须同步保持一致?
  • 对象创建:有些对象组装过程非常复杂,如何保证其初始有效性?
  • 持久化:如何将内存中这个复杂的对象网络保存到数据库,又如何取出来?

AGGREGATE、FACTORY 和 REPOSITORY 就是为了解决这些挑战而生的“三板斧”。

2. 三者的分工与协作

AGGREGATE(聚合) - 定义边界与规则

  • 角色一致性边界数据修改的单元
  • 功能
    1. 划定边界:它将一系列高度相关的对象(实体和值对象)组合在一起,形成一个单元。这个单元有一个唯一的聚合根(Aggregate Root)
    2. 强制执行不变条件:聚合边界内的所有业务规则(不变条件)由聚合根来强制执行。外部对象不能直接操作聚合内的子对象,必须通过聚合根。
    3. 简化关联:通过强制通过聚合根访问,我们避免了复杂的、可遍历的对象图,使得设计更简单,性能更高。

没有聚合,模型就是一片混乱的海洋,你无法确定修改一个对象会影响到谁。

FACTORY(工厂) - 负责复杂对象的“诞生”

  • 角色封装复杂对象的创建逻辑
  • 功能
    1. 隔离创建复杂性:当一个聚合的创建过程非常复杂(需要组装多个部分、校验多种规则)时,使用工厂模式将这部分知识封装起来。
    2. 保证初始有效性:工厂确保它产出的聚合实例从一开始就是完整且有效的,符合所有不变条件。
    3. 解除客户端与具体实现的耦合:客户端不需要知道聚合内部的具体结构,只需调用工厂方法即可。

工厂是聚合生命的起点,它确保聚合“出生”时就健康强壮。

REPOSITORY(仓储) - 负责对象的“持久化生命”

  • 角色提供聚合的全局访问接口,并抽象持久化机制
  • 功能
    1. 作为聚合的“集合”:在客户端看来,Repository 就像一个简单的、在内存中的集合(如 orders.Add(newOrder)),可以随时从中获取或存储聚合。
    2. 抽象基础设施:它将领域层与数据持久化技术(SQL、NoSQL、文件系统)解耦。领域层不关心数据如何存储,只关心通过 Repository 存取聚合。
    3. 基于聚合根进行查询和保存:Repository 的操作单位是聚合根,而不是单个的实体或值对象。当你保存一个订单聚合时,它会自动保存订单的所有订单项。

仓储是聚合在内存世界和持久化世界之间的桥梁,它让聚合可以“永生”。

3. 总结:三位一体的协作关系

下图清晰地展示了三者在领域对象生命周期中的核心作用与协作关系:

 

它们共同实现了 DDD 的核心目标:创建一个边界清晰、规则明确、并且能够与技术设施解耦的领域模型。没有聚合,边界就会模糊;没有工厂,复杂聚合的创建会污染业务代码;没有仓储,领域模型就会与数据库紧耦合。这三者缺一不可,是实践 DDD 战术建模最关键的基石。

文章:领域对象生命周期管理:AGGREGATE、FACTORY与REPOSITORY实战手册

 

...全文
176 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

6

社区成员

发帖
与我相关
我的任务
社区描述
我们相信,职业不只是谋生的路径,更是自我实现的舞台。 无论你是初入职场的探索者,还是寻找突破的创造者, 这里都是你重新定义“工作与生活”的能量场。 在变化的时代中,用思考与行动,走出属于自己的职场可能
职场和发展求职招聘程序人生 个人社区 上海·静安区
社区管理员
  • 云雾J视界
  • fengyutu321
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

欢迎来到 WorkPlay|职场不设限!
这里是一群相信「工作可以被重新定义」的职场人聚集地。

在这里,我们不盲从既定路线,也不被头衔束缚。
我们聊方向、聊成长、聊转型;
我们交换真实经验,也创造新的可能。

Work 是积累与专业,
Play 是探索与表达。
我们相信,真正的职业成长,源自不断尝试与持续思考。

为了共同营造一个高质量、开放且有温度的讨论空间,请大家:

  • 尊重他人观点,拒绝人身攻击;

  • 分享真诚经验,避免虚假或营销内容;

  • 鼓励思考与交流,让每一次发言都带来启发。

让我们在这里,一起打破边界,
玩出属于自己的职场新可能。

试试用AI创作助手写篇文章吧