Identity
何时沿用实体、何时形成新版本、何时新建实体
形成一个版本前,写入方要先回答两个问题:这是不是已有的实体?这是不是已保存的版本?下表是常见情况的答案。
| 情况 | EntityId | VersionId |
|---|---|---|
| 重试或重放已提交的版本 | 沿用 | 沿用 |
| 按业务规则认出已有实体,内容有变化 | 沿用 | 新建 |
| 补全或纠正同一件事实 | 沿用 | 新建 |
| 新的独立观测 | 新建 | 新建 |
| 另一个 Observer 确认、否定或陈述 | 新建 | 新建 |
| 同一个 Observer 重新处理 | 新建 | 新建 |
共同规则
IDENTITY-1 业务规则定身份
执行方:写入方、后端
业务规则决定什么算同一个实体。写入方认出已有实体时,沿用原来的 EntityId 形成新版本,否则生成新的 EntityId。后端按写入方给出的 EntityId 保存。
IDENTITY-2 身份与 Observer 无关
执行方:写入方
业务实体的身份由业务规则决定,与形成它的 Observer 是谁无关。同一个 Observer 可以形成很多业务实体,多个 Observer 也可以观测同一个业务实体。
Observation
IDENTITY-3 独立观测,新建实体
执行方:写入方
新的独立观测使用新的 EntityId。另一个 Observer 的确认、否定或陈述,以及同一个 Observer 的重新处理,都形成新的 Observation。
IDENTITY-4 补全纠正,出新版本
执行方:写入方
补全或纠正同一件事实时,形成原 Observation 的新版本。例如前台时段随每次确认延长,或者纠正填错的时区;从时间点补全为时段,也是这种情况。补全不得把几次独立的读数合并为同一份 Observation。
IDENTITY-5 重试沿用 VersionId
执行方:写入方
重试或重放已提交的版本时,沿用原来的 VersionId,内容、引用和 Observer 也保持原样。后端怎样处理重复提交,见 VERSION-7。
观测内容
IDENTITY-6 内容的粒度
执行方:写入方
观测内容的粒度由业务规则决定:内容变化时,是形成内容实体的新版本,还是新建一个实体。
IDENTITY-7 不补造身份
执行方:写入方
来源缺少稳定标识时,写入方按已有证据识别实体,不得补造来源身份;证据不足以确定的字段保持未知。作用范围不同的同名标识属于不同的实体,例如两台设备上同名的应用。