Новый идентификатор объекта в доменном событии

Я создаю приложение с моделью домена, используя CQRS и концепции событий предметной области (, но без источников событий, просто старый добрый SQL ). С событиями типа SomethingChanged проблем не было. Затем я застрял в реализации событий SomethingCreated.

Когда я создаю некоторую сущность, которая сопоставляется с таблицей с первичным ключом идентификации, я не знаю идентификатор, пока сущность не будет сохранена. Сущность не знает о постоянстве, поэтому при публикации события изнутри сущности идентификатор просто неизвестен -, он волшебным образом устанавливается только после вызова context.SaveChanges (). Итак, как/где/когда я могу поместить идентификатор в данные события?

Я думал о:

  • Включая ссылку на сущность в событии. Это будет работать внутри домена, но не обязательно в распределенной среде с несколькими автономными системами, взаимодействующими с помощью событий/сообщений.
  • Переопределение SaveChanges ()для обновления событий, поставленных в очередь для публикации.Но события должны быть неизменными, так что это кажется очень грязным.
  • Избавление от полей идентификации и использование идентификаторов GUID, сгенерированных в конструкторе сущностей. Это может быть проще всего, но может снизить производительность и усложнить другие задачи, например отладку или выполнение запросов (where id = 'B85E62C3-DC56-40C0-852A-49F759AC68FB'., нет MIN, MAXи т.д. ). Это то, что я вижу во многих примерах приложений.
  • Гибридный подход -оставляет в покое идентификатор и использует его в основном для внешних ключей и более быстрых соединений, но использует GUID в качестве уникального идентификатора, с помощью которого я извлекаю объекты из репозитория в приложении.
12
задан Pein 30 June 2012 в 21:49
поделиться