Как получить список агрегатов, используя CommonDomain и EventStore JOliviers? - PullRequest
1 голос
/ 19 августа 2011

Репозиторий в CommonDomain предоставляет только «GetById ()». Так что же делать, если моему Обработчику нужен список клиентов, например?

Вернер

Ответы [ 4 ]

3 голосов
/ 24 августа 2011

По номинальной стоимости вашего вопроса, если вам необходимо выполнить операции с несколькими агрегатами, вы просто предоставите идентификаторы каждого агрегата в вашей команде (которые клиент получит со стороны запроса), а затем вы получите каждый агрегат изхранилище.

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

Этот вопрос довольно поднялмного споров о том, как это сделать, и Грег Янг написал пост в блоге.

Классический вопрос: как мне проверить, что имя пользователя еще не использовалосьпри обработке моего «CreateUserCommand».Я полагаю, что предлагаемый подход состоит в том, чтобы предположить, что клиент уже сделал эту проверку, задав запросную сторону перед выполнением команды.Когда пользовательский агрегат создан, UserCreatedEvent будет вызван и обработан стороной запроса.Здесь запрос вставки не будет выполнен (либо из-за проверки, либо из-за уникального ограничения в БД), и будет выдана компенсационная команда, которая удалит вновь созданный агрегат и, возможно, отправит электронное письмо пользователю, сообщив ему, что имя пользователя уже занято.

Главное, вы предполагаете, что клиент сделал проверку.Я знаю, что этот подход поначалу трудно осознать - но это характер возможной последовательности .

Также вы можете прочитать этот другой вопрос, который похожи содержит некоторые мудрые слова из Udi Dahan .

0 голосов
/ 19 августа 2011

Ваша команда должна содержать идентификатор совокупного корня, с которым она должна работать.Этот идентификатор будет найден клиентом, отправившим команду, используя представление вашей модели чтения.Это представление будет заполнено данными о событиях, которые излучает ваш AR.

0 голосов
/ 20 августа 2011

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

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

0 голосов
/ 19 августа 2011

Вам не нужен список клиентов в вашем обработчике. Каждый агрегат ДОЛЖЕН обрабатываться в своей собственной транзакции. Если вы хотите показать этот список пользователю - просто создайте соответствующий вид.

...