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