Назначение
Опиши доменное правило, которое aggregate обязан сохранять всегда, включая конкуренцию, replay и partial failure.
Область Действия
| Поле | Значение |
|---|
| Domain | <domain> |
| Aggregate | <AggregateName> |
| Entity/value object | <EntityName/ValueObjectName> |
| Сервисы | <service list> |
| Критичность | <Security/Compliance/Consistency/Operational> |
Формулировка Правила
<Краткая строгая формулировка invariant-а>
Данные Правила
| Поле | Тип | Источник | Описание |
|---|
<FieldName> | <Type> | <aggregate/request/reference data> | <описание> |
Предусловия
| Условие | Ошибка |
|---|
<condition> | <ErrorCode> |
Переходы Состояний
| From | To | Разрешено когда | Запрещено когда |
|---|
<State> | <State> | <condition> | <condition> |
Контроль Enforcement
| Место | Правило |
|---|
| Domain | <инвариант агрегата: guard> |
| Application | <проверка входа, загрузка, конкуренция> |
| Database | <constraint/index: last-resort integrity> |
Конкурентность
| Сценарий | Ожидаемое поведение |
|---|
| Parallel commands | <one commit succeeds, conflicts return typed error> |
| Stale version | <ExpectedVersion conflict> |
| Replay | <idempotent no-op or same result> |
Побочные Эффекты
| Event/Audit | Когда Создается | Snapshot |
|---|
<event.name> | <valid transition> | <SnapshotModel> |
<AuditAction> | <decision point> | <audit fields> |
Тесты
| Тест | Ожидание |
|---|
| Valid case | <success> |
| Invalid precondition | <typed error> |
| Illegal transition | <typed error/no side effects> |
| Concurrent update | <conflict/idempotent result> |
Обратные ссылки
Автоссылки: где используется этот документ.