О склейке данных
Мы предполагаем, что данными из нашего API пользуются сторонние сервисы.
Это значит, что мы должны дать им механизмы, позволяющие видеть изменения наших объектов.
У нас есть некоторые встроенные системные поля,
показывающие когда и кто создавал/обновлял объекты.
Бывают ситуации, когда пользователь нашей системы допускает дубли в своих данных,
это значит, что были заведены два одинаковых бизнес объекта, и эти объекты разошлись в другие системы,
где кто-то мог успеть использовать эти объекты в какой-то логике.
Например, у нас есть "Объект общей собственности" (
Property), и оператор по ошибке завел дубликата этого объекта
с одинаковым адресом. Это попало в биллинговые системы,
и там к объектам уже успели привязать "Лицевые Счета" (BillingAccount / BankingAccount), и клиент уже успел выполнить "Платежи" (Payment).Фактически, мы должны произвести процедуру склеивания двух одинаковых объектов.
Для этого мы удалим один из объектов (не важно, какой из двух) и проставляем в нем поля
newId.Бывают ситуации, когда мы принимаем решение, что объекты слишком разные и более не являются одной сущностью.
Например, у нас есть объект "Здание" у которого есть атрибут "тип_здания",
он может принимать значения "внутренний паркинг", "многоквартирный дом", "отдельно стоящий паркинг".
Через некоторое время, мы поняли, что объекты с атрибутом "внутренний паркинг" являются самостоятельными бизнес сущностями
и имеют собственный жизненный цикл. Нам нужно провести миграцию данных.
Для проведения миграции, мы создаем новую бизнес сущность "Внутренний паркинг",
где один из атрибутов указывает на "Здание" к которому этот паркинг относится.
Старые бизнес объекты нужно удалить и поставить в них поля newId и newType.