Внедрение с четырьмя глазами в системе контактов и компании - PullRequest
1 голос
/ 03 февраля 2012

Требование

Мы строим довольно сложную систему, в которой нам нужно управлять контактами и компаниями (юридическими лицами).Объекты управляются бизнес-пользователями.У них есть несколько ассоциаций.Например:

Контакт

  • 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, больше не читаются

1 Ответ

1 голос
/ 03 февраля 2012

идея 2 лучше.За исключением того факта, что вам нужно выполнить некоторую проверку для ожидающих изменений. Так что, когда бы ни изменялась сущность, вам нужно сначала проверить. Если существуют какие-то ожидающие изменения для этой сущности, то теперь это будет зависеть от конечного пользователя, чтобы решитьконфликт, и он может перезаписать старые ожидающие изменения. В конце концов он просто перезаписывает ожидающие изменения, которые хранятся в форме XML.Или вы можете не перезаписывать старую версию и иметь две версии ожидающих изменений, и тогда будет зависеть от того, какой бизнес-пользователь определит, какая из них лучше. Так что в этом случае вы можете получить ожидающие изменения в форме XML, например:

 <pendingChanges entityID="12333">
     <propertyName1>
      <version1 value="val1"/>
      <version2 value="val2"/>
    </propertyName1>
    <propertyName2>
     <version1 value="val1"/>
     <version2 value="val2"/>
     <version2 value="val3"/>
    </propertyName2>
  </pendingChanges>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...