Логическое удаление с источником событий (возможно, с конфиденциальными данными / GDPR) - PullRequest
0 голосов
/ 24 июня 2018

Я понимаю, что источники событий должны быть неизменными и добавляться только.

Однако мне интересно, как я справляюсь с логическим удалением. Если пользователь нажимает «удалить» в пользовательском интерфейсе и ожидает жесткого удаления, я должен включить флаг IsDeleted в мое событие? Есть ли здесь другие варианты?

Редактировать: Вопрос представляет особый интерес, когда вокруг находятся конфиденциальные данные, возможно, сохраненные в самом событии, и пользователь ожидает, что он будет полностью удален из наших систем. Это может относиться к регулированию и законам о ВВП ЕС.

Ответы [ 4 ]

0 голосов
/ 29 июня 2018

Как сказал @Vincent Hendriks: «Вы можете опубликовать« удаленное »событие, которое удалит / пометит данные как удаленные в вашей базе данных для чтения».

Вот очень хороший пример, демонстрирующий эту концепцию:http://next.belus.com/Demos/Events

В демонстрационной версии щелкните ссылку «Изменить» и нажмите кнопку «Удалить».Внизу страницы, смотрите событие, которое создается.

0 голосов
/ 25 июня 2018

Обычно вы не отображаете события в вашем пользовательском интерфейсе, вы отображаете модель чтения, рассчитанную по событиям.

Например, вы можете иметь события

TASK_CREATED "один"

TASK_CREATED "два"

TASK_CREATED "три"

TASK_DELETED "два"

В коде обновления модели чтения (список задач) вы просто добавляете элементы в событие TASK_CREATED и удаляете его в событии TASK_DELETED, поэтому результирующий список будет:

"один"

"три"

Таким образом, если пользователь нажимает «удалить» в пользовательском интерфейсе, он отправляет команду DELETE_TASK в агрегат, агрегат публикует событие TASK_DELETED, и это событие применяется к модели чтения (удаление элемента из списка). Теперь, когда вы запросите модель чтения, будет удален один элемент.

0 голосов
/ 26 июня 2018

Вы можете опубликовать «удаленное» событие, которое удалит / пометит данные как удаленные в вашей базе данных для чтения, но это не сложное удаление (которое вы указываете в своем вопросе). У вас все еще будут данные в вашем хранилище событий.

Жесткие удаления на самом деле довольно сложны при использовании источников событий. Я полагаю, вы работаете с данными клиентов из источников? Обычно есть несколько решений для этого, но они не очень красивые:

  • Вы либо не событийным источником своих конфиденциальных данных клиентов, но храните их отдельно и просто ссылаться на это из вашей совокупности каким-то образом

  • Вы либо удаляете старые события (имейте в виду, что это может сломать больше, чем хотелось бы, но это зависит от вашего дизайна / приложения)

  • Вы можете добавить удаленное событие и изменить существующие события, чтобы удалить конфиденциальные данные.

0 голосов
/ 24 июня 2018

включить ли в событие событие IsDeleted?Есть ли здесь другие варианты?

Если вы спрашиваете "Можно ли отменить событие, установив флаг isDeleted?";нет, обычно это не так.Вместо этого мы добавляем новое событие, которое «меняет» эффект первого.Иногда вы увидите, что это описывается как компенсирующее событие.В зрелых доменах (например, учет) часто существует явный протокол для обращения событий.

...