В CQRS как передать список допустимых методов в агрегированном интерфейсе в пользовательский интерфейс? - PullRequest
5 голосов
/ 02 сентября 2011

У меня есть совокупный корень 'Order', и у него есть несколько методов, которые внутренне устанавливают его поле 'Status':

  • Submit
  • Place On Hold
  • Снятие удержания
  • Подтверждение
  • Отмена
  • и т. Д.

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

Как мне сделать это с минимальным нарушением СУХОГО?

1 Ответ

4 голосов
/ 02 сентября 2011

Самое простое решение - спроецировать текущее состояние вместе с доступными переходами на модель чтения / запроса и выбрать его вместе с данными для отображения.

Пример: PlaceOnHoldCommand приводит к OrderPlacedOnHoldEvent, который (помимо помещения в EventStore ) публикуется и обрабатывается OrderTransitionsEventHandler, который денормализует доступные переходы в таблицу БД, связанную с Order. Клиент выбирает доступные переходы и действует соответственно (скрывает недоступные кнопки или что-то в этом роде).

Это, конечно, один из вариантов. Не ожидайте, однако, что не будет никакого дублирования вообще. CQRS помогает управлять сложностью, а иногда это означает, что происходят незначительные нарушения DRY.

...