# 领域模型的统一建模规则 > 状态:working-draft;治理依据:[AGENTS.md](../../../AGENTS.md)。日期:2026-09-18。 ## 1. 从场景推出对象 每个对象先说明使用者希望完成的动作、对象身份是否延续、哪些规则必须一起满足,再决定它是实体、值对象、聚合根、事实、投影还是流程记录。名称来自业务语言,不能因为旧表存在就沿用,也不能将每个名词都变成聚合根。 | 分类 | 判定依据 | 例子 | |:---|:---|:---| | 实体 | 属性变化后仍是同一业务对象 | Order、Task | | 值对象 | 按值解释、不可变,无独立业务身份 | Money、Quantity、时间窗口 | | 聚合根 | 负责一组状态与规则的合法改变,是修改入口 | Order 维护订单行与成交规则 | | 不可变事实 | 某件事已经发生并有来源依据 | 经验证收款、已接受测量、账本分录 | | 快照 | 某次承诺接受的源数据副本 | 成交地址与规格 | | 投影 | 从其他事实派生、可重建 | 可用量、订单旅程、总账汇总 | | 流程对象 | 跟踪步骤、重试与恢复,不替代源事实 | 订单确认、外部订单导入 | 不可变事实也可能属于聚合或作为独立根管理;分类服务于责任分析,不能机械认为只有可变对象才有一致性边界。 ## 2. 基础值与公共语义候选 本表只确定业务含义及必须明确的约束,编码与字段格式由后续唯一契约定义。 | 概念 | 语义与约束 | 定义责任 | |:---|:---|:---| | Money | 金额与币种不可分;精度、舍入、分摊与换算必须明确;禁止浮点误差污染资金结果 | 公共契约维护者;交易与财务提供业务约束 | | Quantity / Unit | 数量必须带单位;计数、重量、容量不能无依据换算 | 公共单位语义;各事实 Owner 定义允许操作 | | TypedId / SourceRef | 标识注明对象类型与业务作用范围,外部标识包含必要渠道账号维度 | 各 Owner 定义,消费者引用 | | VersionRef | 说明版本属于对象、政策、契约还是授权,不能混用 | 对应版本 Owner | | TimeWindow | 区分发生、接收、生效时间及业务时区,明确截止端点含义 | 业务 Owner 与公共时间契约 | | Address/Spec/Price Snapshot | 保存承诺时接受的内容及来源,不随当前主数据回写 | 接受承诺的 Owner | | IdempotencyIdentity | 一次请求身份与一次业务目标身份分别定义 | 技术去重机制 + 业务 Owner | | CurrentActor | 授权上下文的有时效快照,不是共享可变用户实体 | Identity | | ObservationRef / EvidenceRef | 原始观察与证据的引用,明确来源与接受决定 | 接收方与事实判断 Owner | 不得把旧 UUID 版本、分钟数、包装规格或价格公式当作本轮已批准的公共约束。基础类型唯一不意味着所有上下文采用一个巨大的共享模型。 ## 3. 生命周期与动作必须配套 每条精确迁移后续至少列: - 发起角色或系统、对象及数据范围。 - 原状态、业务前置条件、授权与审批要求。 - 采用的对象和政策版本、校验与写入的原子范围。 - 新状态、追加事实、输出和需要通知的消费者。 - 重复、冲突、条件不满足、超时、未知结果及恢复方式。 “取消”“完成”“确认”等词必须有上下文。订单商业取消、容量释放、退款到账和停止作业可以处于不同阶段;只能按明确关闭规则认定全链完成。 ## 4. 模型更新纪律 2026-09-29 补充:订单终态不可逆,重购、替换、补发、更正使用新的关联对象;不能将一般主数据的可逆状态套在订单上。资金、每日授权、执行门禁和协调进度分别建模。单根 CAS 不替代来源唯一性、原收款额度与执行数量谱系守卫;具体主讲见[交易级严谨性](TRANSACTION-INTEGRITY.md)。六类候选精确迁移以[机器定义](../state/FRESH-DELIVERY.md)为单源,正文仅解释责任和条件,未决 guard 不能直接生成生产逻辑。 引用优先稳定 ID 和不可变版本;跨域引用允许业务快照,但不允许 ORM 级联写对方实体。旧版本更正采用新版本或有依据的调整,不能删除历史掩盖错误。 聚合不无限包含会话、事件、消息、任务或历史列表。需要分页或独立演进的集合先判断是否为独立实体/记录,再设计其一致性关系。一个 BC 可以拥有多个本地事务边界;任何跨根强约束都必须显式处理,不能仅写“最终一致”跳过风险。