Рассмотрим приложение (ReactJS), в котором сущности Group
и User
связаны друг с другом отношением «многие ко многим».
Дерево состояний выглядит так:
{
groups: {
"1": {id: "1", name: "..."},
...
},
users: {
"42": {id: "42", name: "..."},
...
},
memberships: [
{groupId: "1", userId: "42"},
...
]
}
В пользовательском интерфейсе пользователь может «выбрать» ноль или более групп с нолем или более связанных пользователей на группу. В настоящее время он представлен в таком состоянии:
{
selectedGroupIds: {
"1": {selectedUserIds: ["42", ...]},
...
}
}
(кроме того, следующий дизайн может быть предпочтительнее приведенного выше, поскольку он более явный; буду благодарен за комментарии по этому поводу):
{
selectedGroupIds: [
{id: "1", selectedUserIds: ["42", ...]},
...
]
}
В любом случае, вернемся к основному вопросу:
В настоящее время, когда пользователь выбирается в контексте группы, и в какой-то момент группа и пользователь отключаются (членство заканчивается, пользователь удаляется и т. Д.), Тогда selectedGroupIds
будет в недопустимом состоянии. При написании этого я теперь понимаю, что это также относится к memberships
, когда удаляются группы или пользователи.
Есть ли способ спроектировать дерево состояний так, чтобы вышеописанный сценарий был предотвращен? Или ручная уборка неизбежна в случае изменения отношений?