Проверка уникальности при использовании CQRS и источников событий

Я пытаюсь реализовать свою собственную инфраструктуру CQRS с Event Sourcing, чтобы лучше изучить ее. В качестве образца проекта я реализую движок блога, я знаю, что он может не идеально подходить, но я просто хочу поработать над чем-то реальным.

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

Я могу придумать два «решения».

  1. Создайте агрегат Блог , который отслеживает все настройки, связанные с блогами, а также ссылки на все сообщения. Но проблема с этим, на мой взгляд, заключается в том, что мне приходится обрабатывать связь между агрегатами в этом сценарии, а также каждый раз, когда мне нужно проверять уникальность shortUrl , мне нужно читать все события из события store для создания всех сообщений, и это кажется сложным.
  2. Вторая альтернатива, которая у меня есть, - это когда событие запускается, и мой обработчик событий, который создает модель чтения, запускает повторяющееся событие короткого URL-адреса, когда он замечает, что у него будет два коротких URL-адреса, указывающих на разные сообщения.Допустимо ли, чтобы модель чтения запускала события при обнаружении ошибок?

Есть ли еще альтернативы. Обратите внимание: я знаю, что мой домен может не лучше всего подходить для cqrs и DDD, но я делаю это, чтобы учиться в небольшом домене.

19
задан ataddeini 4 May 2015 в 17:46
поделиться