首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >DDD|领域对象的生命周期管理

DDD|领域对象的生命周期管理

作者头像
AI老马
发布2026-05-18 17:30:27
发布2026-05-18 17:30:27
970
举报
文章被收录于专栏:AI前沿技术AI前沿技术

在领域设计中管理对象的生命周期是至关重要的。本节介绍三种生命周期管理的模式:聚合 Aggregate,工厂模式 Factory,仓储模式 Repository。

聚合通过定义清晰的所属关系和边界,避免混乱、错综复杂的对象关系网来实现模型的内聚。在对象生命周期的开始,使用工厂模式来创建和重建复杂对象,从而封装他们的内部结构。在生命周期的中间和末尾,使用仓储模式来提供查找和检索持久化对象并封装庞大基础设施的手段。

1,聚合 AGGREGATE

为什么要聚合?

在具有复杂关联的模型中,要想保证对象更改的一致性是很困难的。关联对象之间具有复杂的固定规则,而遵循复杂的规则,会导致各个对象之间的相互干扰,进而导致系统不可用。

解决方式:使用聚合,归类相同业务。

聚合就是把一组业务上关联紧密的对象,圈成一个独立整体,当作数据变更、业务规则校验的最小单元

每个聚合有两个核心:聚合根 + 聚合边界

  1. 1. 聚合根:聚合内部一个唯一的主实体,拥有全局唯一标识,是对外唯一入口;
  2. 2. 聚合边界:划定范围,规定哪些实体、值对象属于这个聚合内部。

边界内定义了聚合的内部都有什么,根则是聚合内部包含的一个特定实体 ENTITY。对聚合而言,外部对象只可以引用根,而边界内部的对象可以互相的引用。

图 1,聚合根定义

图中汽车类 Car 为聚合的根,称之为聚合根,它的边界内包括(Wheel,Tire,Position)。外部的用户 Customer 只能通过聚合根访问边界内部元素。

聚合内部要满足的一些规则:

  • • 外部只能引用聚合根,不能直接访问、持有聚合内部子对象;
  • • 内部对象互相可以随意引用,只在聚合内局部唯一;
  • • 聚合根全权负责校验业务固定规则,保证整体数据合规;
  • • 内部子对象不能单独从数据库查出来,只能通过聚合根遍历获取;
  • • 删除聚合时,必须一次性删掉边界内所有对象;
  • • 修改聚合内任意一个对象,都要校验整个聚合的所有业务规则,保证整体一致。

小结:聚合划出一个范围,在这个范围内,生命周期的每个阶段都必须满足一些固定规则

2,工厂模式 FACTORY

当创建一个对象或是整个聚合对象时,如果创建工作很复杂,或者暴露了过多的内部结构,则可以使用工厂模式进行封装。

工厂模式 = 专门负责 “造对象” 的方法

它不负责业务逻辑,只干一件事:安全、正确、完整地创建出一个领域对象 / 聚合对象

工厂模式是一种更加抽象且不与其它对象发生耦合的构造机制,一种负责创建其他对象的程序元素。

图2,工厂模式交互图

2.1,使用场景:

  • • 创建一个对象需要很多步骤、很多校验

比如:创建订单 → 要生成订单号、校验商品、计算价格、初始化状态、关联用户。这种步骤多、规则多的,不能让外面随便 new 订单。

  • • 要创建的是 “聚合”,不能暴露内部结构

聚合内部有很多子对象,外面不能随便碰。必须通过聚合根的工厂方法统一创建,保证聚合完整。

  • • 不想暴露对象的内部构造

比如对象构造函数很复杂,有很多私有成员,不想让外部知道。

  • • 创建对象必须遵守业务规则

比如:用户必须满 18 岁才能创建。订单金额不能为负数。一个聚合里不能出现重复数据。这些规则必须在创建时就保证,所以交给工厂方法最安全。

  • • 对象的创建依赖另一个对象的数据 / 规则

比如:用 “用户” 的数据创建 “订单”,用 “商品” 的数据创建 “订单项”。这种关系紧密的,就在对方类里写工厂方法,逻辑最清晰。

2.2,应用位置

工厂的应用位置:聚合根里面(最常见)和专门的工厂类

下面是具体的一些规则。

  • • 如果是向一个已经存在的聚合添加元素,可以在聚合根上创建一个 工厂方法。这样既可以把聚合的内部实现细节隐藏,同时使根负责确保聚合在添加元素时的完整性。
  • • 如果一个对象的生成与另一个对象密切相关,但它并不拥有所生成的对象,此时可以在对象上使用工厂方法。
  • • 当一个对象的创建主要适用另一个对象的数据或是规则时,则可以在后者的对象上创建一个 工厂方法,这样就不必将后者的信息提取到其他地方来创建前者。同时也有利于表达前后着的密切关系。
  • • 工厂与被创建对象之间时紧密耦合的,因此工厂应该只被关联到与被构建对象有着密切联系的对象上。有些细节需要隐藏,但又找不到合适的地方,必须创建一个专用的工厂对象或事服务。

好的工厂函数有两个要求:

  • • 每个创建方法都是原子的。要么成功,要么失败。
  • • 工厂应该被抽象为所需的类型,而不是所要创建的具体类。

总结:

工厂模式是什么:专门创建领域对象 / 聚合的方法,保证创建过程安全、正确。

什么时候用:创建复杂、需要校验、属于聚合、不想暴露内部结构。

优势:封装复杂、保证合法、解耦、保护聚合、易维护。

3,仓储模式 REPORSITORY

仓储模式:是 DDD 中专门管理领域对象生命周期的设计模式。

为每一个需要全局访问的聚合根,创建一个专属仓储对象,这个对象是该类型所有领域对象在内存中的集合替身,对外提供统一的全局访问接口,完全封装数据库的存储、查询、增删细节,让领域层只关注业务逻辑,不关心数据怎么存、怎么取。

图3,仓储模式交互图

解决业务中的痛点:

  • 业务代码和数据库代码强耦合:Service 里写 SQL/ORM,换数据库就要改业务逻辑
  • 对象生命周期混乱:不知道对象从哪来、该怎么存、怎么删
  • 代码复用性差:相同的查询逻辑到处复制,维护成本极高
  • 测试极难:必须依赖真实数据库才能运行测试

仓储模式,一般是提供一个简单的模型,来获取持久化对象并管理聚合根的生命周期。使得应用程序和领域设计与持久化技术解耦。

仓储模式核心使用场景

  • 需要全局访问领域对象(查询、新增、删除、修改)
  • 管理聚合根的完整生命周期(创建→持久化→查询→更新→删除)
  • • 领域层需要解耦数据持久化技术(换数据库、换 ORM 不改动业务代码)
  • • 单元测试需要模拟数据层(不用真实数据库也能测试业务)

小结:仓储 = 领域对象的专属管家,只管聚合根,DDD 核心规则,不管理普通实体 / 值对象。对外像内存集合一样用List/Set。对内隐藏所有数据库操作(SQL、ORM、缓存等)。

总结:

聚合将业务关联紧密的对象集合为数据修改单元,有聚合根(对外唯一入口)和边界,外部仅能引用聚合根。

场景:对象关联复杂、需统一校验业务规则、需整体增删改的场景。

工厂(含工厂方法)专门负责创建领域对象 / 聚合的组件,封装创建逻辑。

场景:对象 / 聚合创建复杂、需校验规则、需隐藏内部构造、避免外部依赖具体类的场景。

仓储封装聚合根的持久化操作(存取、删除),隔离领域模型与数据访问。

场景:需统一管理聚合根持久化、避免领域层依赖数据层、保证聚合整体存取的场景。

三者协同,工厂负责创建聚合,仓储负责持久化聚合,聚合保证业务规则一致性

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-05-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI老马啊 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1,聚合 AGGREGATE
    • 2.1,使用场景:
    • 2.2,应用位置
  • 3,仓储模式 REPORSITORY
    • 总结:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档