Я все еще пытаюсь понять, как применять DDD и, совсем недавно, CQRS в реальном производственном бизнес-приложении.В моем случае я работаю над системой управления запасами.Он работает как серверное приложение, предоставляемое через REST API нескольким клиентским приложениям.Я сфокусировался на уровне домена, которому должны следовать API и клиенты.
Командная сторона домена используется для создания нового Заказа и позволяет изменять, отменять, помечать Заказ как выполненный и отправленный / завершенный.,У меня, конечно, есть запрос, который возвращает список заказов в системе (в виде облегченных DTO только для чтения) из хранилища.Другой запрос возвращает PickList, используемый сотрудниками склада для выгрузки товаров с полок для выполнения определенных заказов.Для создания PickList существуют вычисления, правила и т. Д., Которые необходимо оценить, чтобы определить, какие заказы готовы к выполнению.Например, если все позиции заказа есть в наличии.Мне нужно прочитать тот же список заказов, выполнить итерацию по списку и применить эти правила и расчеты, чтобы определить, какие элементы должны быть включены в список выбора.
Это не простой запрос, поэтому как он вписывается вмодель?
ОБНОВЛЕНИЕ
Хотя я могу поддерживать (хранить) набор списков выбора, они действительно являются динамическими, пока сотрудник не получит следующий список выбора.Рассмотрим следующий сценарий:
Получен первый ордер дня.Я могу вызвать событие домена, которое запускает команду AssemblePickListCommand, которая применяет все правила и логику для создания одного или нескольких списков выбора для этого заказа.
Получен второй заказ.Обработчик событий теперь должен ЗАМЕНИТЬ исходные списки выбора с одним или несколькими новыми списками выбора, оптимизированными для обоих ожидающих заказов.
Аналогично после получения третьего Заказа.
Предположим, у нас теперь есть два списка выбора в «очереди», потому что правила оптимизации разделяют списки, потому что компоненты находятся на противоположных концах склада.
Сотрудник склада # 1 запрашиваетPickList.Первый PickList извлекается и печатается.
Получен четвертый Заказ.Как и прежде, обработчик удаляет второй PickList из очереди (единственный оставшийся) и восстанавливает один или несколько PickList на основе второго PickList и нового Order.
Ассемблер PickList ''будет повторять эту логику всякий раз, когда будет получен новый ордер.
Моя проблема заключается в том, что запрос должен либо блокироваться во время обновления очереди PickList, либо у меня возникает проблема непоследовательности, которая противоречитповедение, которое хочет клиент.Каждый раз, когда они запрашивают PickList, они хотят, чтобы он был оптимизирован на основе всего Заказа, полученного к этому моменту времени.