2016-08-02 18 views
2

Наша текущая система - это унаследованная система, которая не использует domain events. Мы собираемся начать публикацию domain events. Другие ограниченные контексты будут слушать эти domain events, но только с момента начала публикации, теряя всю прошлую информацию.DDD: применение магазина событий в старой системе

Затем, как бороться с этой унаследованной системой, которая не записывала эти события, но почему-то мы хотим иметь прошлую историю до внедрения этой системы хранения событий?

Это хороший подход, который пытается выяснить, что произошло, и попытаться создать события домена (обратное проектирование) в соответствии с данными, которые мы имеем в нашей БД?

ответ

6

Я бы не пошел по пути попытки перепроектировать события для устаревшей системы, , если нет деловых причин для этого. - это ваш прецедент, который вы хотите вписаться в новый способ, которым вы Будете ли вы моделировать вещи, используя события? Если для этого нет никакого делового случая, это звучит как пустая трата усилий.

Как насчет того, чтобы иметь одно начальное событие, которое представляет текущее состояние каждой вашей вещи (т. Е. Агрегирует, если вы используете концепции DDD), как они существуют сейчас в старой системе? Затем добавьте новые события поверх этого.

I.e.

LegacySystemStateCaptured

NewDomainEvent

AnotherNewDomainEvent

... тогда, когда вы восстановить свое состояние, применить событие LegacySystemStateCaptured, а также другие.

+0

Хороший ответ. Я также добавлю, что в зависимости от реализации «Снимок» можно даже записывать данные, которые были бы в событии «LegacySystemStateCaptured», как событие моментального снимка, так как в любом случае все они будут содержать все типичные данные. Это позволит сэкономить на одноразовом событии, но это определенно зависит от реализации. –

+0

Да, полностью. Не стесняйтесь редактировать мой ответ с этим предложением :) – tomliversidge