CQRS - как моделировать систему выполнения сценария

Недавно я начал исследовать CQRS и DDD для нового проекта, который я собираюсь начать. Я изучил много материала от Уди Дахана, Грега Янга, Марка Нейхофа и других. Они действительно были очень полезны, и я думаю, что хорошо понимаю концепции. Но, у меня все еще есть определенные вопросы о том, как я могу применить их к моей собственной области.

Моя система будет в основном сложной системой правил, в которой правила будут определять окончательную цену определенных продуктов. Определения продуктов и правила будут введены в систему администраторами. Правила будут разработаны администраторами с использованием предопределенного набора свойств, которые могут иметь значения из предопределенного набора, например «Цель покупки» (перепродажа, сдача в аренду) или значений в свободной форме, например Возраст .

У каждого продукта будет базовая цена, и правила будут в основном добавлять / удалять базовую цену, если они применяются.

Очень простое примерное правило может быть:

Для продукта X, IF (Цель покупки = перепродажа и возраст> 25) Добавьте 25 $ к базовой цене.

Итак, есть 2 типа пользователей, которые используют систему: администраторы, определяющие продукты, правила и базовые цены; и другие пользователи, которые запрашивают цены на основе сценария, в который они входят через пользовательский интерфейс «что, если».

Моя путаница заключается в следующем: выполнение сценария вообще не меняет состояние домена, никакая другая внешняя система / человек интересует результат выполнения сценария, но сам запущенный пользователь - он возвращает результат расчета цены после выполнения применимых правил для данного сценария. Например, пользователь может выбрать Продукт X и запросить цены для данного сценария, например (цель покупки = перепродажа и возраст = 40) . Опять же, поскольку эта операция вообще не меняет состояние домена, я предполагаю, что это запрос. Но в сценарии действует механизм правил для расчета окончательной цены, что, как я полагаю, можно отнести к категории выполняемой логики домена. Итак - где эта логика? Это запрос, который просто работает на основе модели чтения, или запускает сценарий - команду, которую необходимо запустить в модели предметной области? Опять же, кажется, что уровень домена - это место для этих правил, но тогда как мне передать результат выполнения сценария пользователю (похоже, что запрос думает об этом таким образом). Или, может быть, CQRS не является правильным решением для этой конкретной проблемы?

9
задан Ruben Bartelink 9 August 2012 в 00:53
поделиться