Требование
Мы строим довольно сложную систему, в которой нам нужно управлять контактами и компаниями (юридическими лицами).Объекты управляются бизнес-пользователями.У них есть несколько ассоциаций.Например:
Контакт
- ID = 42 , Имя = Джон, Фамилия = Доу
Компания
- ID = 111 , Имя = Компания 1
- ID = 222 , Имя = Компания2
- ID = 333 , Имя = Компания 3
Адрес
- ID = 456,Город = Нью-Йорк, Улица = Бродвей, Тип = Почтовая
- ID = 789, Город = Берлин, Улица = Мейер Штрассе, Тип = Жилой
Контактная компания-Ассоциация
- ContactID = 42 , CompanyID = 111
- ContactID = 42 , CompanyID = 222
Контакт-адрес-ассоциация
- ContactID = 42 , AddressID = 789
- ContactID = 42 , AddressID = 456
Таким образом, контакт с ID = 42 связан с 2 компаниями,Существует больше ассоциаций: у контакта может быть несколько телефонных номеров, почтовых адресов и т. Д. ...
Сущности имеют 3 состояния:
1.InCreation Объект создан, некоторые обязательные поля все еще отсутствуют;не готов к использованию.
2.В ожидании Объект полностью создан, все обязательные поля заполнены;не готов к использованию
3.Подтверждено Объект проверен (пользователем! = Создателем) и может использоваться
Как только объект достиг проверенного состояния и кто-то хочет изменить такой проверенный объект, изменение должно бытьхранится отдельно и не имеет права изменять проверенный объект.Таким образом, однажды подтвержденная сущность все еще является той, которая используется остальной частью системы.Затем бизнес-пользователь! = Модификатор может проверить эти изменения: сравнивая все, что изменилось.Если он принимает эти изменения, изменения должны быть применены к исходной проверенной сущности.Применить означает, что значения необходимо скопировать в исходную запись базы данных, поскольку идентификаторы не могут изменяться (они указывают на другие системы сущностей)
Вопрос
Как сохранить эти модификации?
Идея 1
Модификация - это просто еще одна запись с новым состоянием = InModification .Но тогда мне также нужно удвоить все ассоциации и сохранить связь между исходной сущностью и ассоциациями, поскольку позже мне нужно будет знать, что изменилось (например, почтовый адрес в Нью-Йорке теперь на 5-й улице, а теперь больше на Бродвее).создайте много возможных ненужных записей, поскольку дерево ассоциаций сущностей может быть большим, и нужно создать множество записей, чтобы исправить написание слова
Идея 2
Хранить модификации какXML-капля (мы используем WCF для передачи сущностей с сервера на клиент, поэтому эти сущности по умолчанию сериализуемы).Это то, что не касается идентификаторов, и когда изменения применяются позже (необходимо соблюдать особую осторожность для удаленных и добавленных ассоциаций).Проблема, которую я вижу здесь - обновления программного обеспечения.Как только мы меняем структуру сущностей в последующих обновлениях, возникает опасность того, что старые модификации сущностей, которые хранятся в версиях Betweeb 2, больше не читаются