鼎味肉市DESIGN ATELIER
← 资料目录docs/architecture/08-domain-model/MODELING-RULES.md阅读原文

领域模型的统一建模规则

状态:working-draft;治理依据: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 不替代来源唯一性、原收款额度与执行数量谱系守卫;具体主讲见交易级严谨性。六类候选精确迁移以机器定义为单源,正文仅解释责任和条件,未决 guard 不能直接生成生产逻辑。

引用优先稳定 ID 和不可变版本;跨域引用允许业务快照,但不允许 ORM 级联写对方实体。旧版本更正采用新版本或有依据的调整,不能删除历史掩盖错误。

聚合不无限包含会话、事件、消息、任务或历史列表。需要分页或独立演进的集合先判断是否为独立实体/记录,再设计其一致性关系。一个 BC 可以拥有多个本地事务边界;任何跨根强约束都必须显式处理,不能仅写“最终一致”跳过风险。