Шаблоны для событий домена на основе времени / даты в DDD

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

В идеале я хотел бы, чтобы событие домена создавалось в режиме реального времени, когда эта "дата" просрочена - однако в коде нет никаких триггеров, которые я мог бы использовать для этого. Я действительно могу видеть только один тип шаблона для использования на данный момент - это наличие службы Windows, которая опрашивает каждый час (например, с помощью Topshelf / Quartz), вытягивая все записи с помощью репозитория Product, а затем код, чтобы проверить, или нет даты просрочены и критерии соблюдены. В случае успеха, событие домена будет запущено, и задача будет создана.

Как вы можете себе представить, мне это не особо нравится. Это не в режиме реального времени, и я собираю много данных для достижения чего-то относительно простого. Я пропускаю трюк здесь? Какой-то конечный автомат / рабочий процесс? Какие архитектурные образцы / хорошие проекты доступны для меня, чтобы использовать в этой ситуации?

Извиняюсь, если вопрос немного расплывчатый, и я попытаюсь уточнить, если это будет необходимо.

1 ответ

Решение

В любом случае, если вы используете сложный планировщик, такой как Quartz, почему бы просто не использовать его для обратного вызова вашего приложения в тот момент, когда Задача просрочена? Я никогда не использовал Кварц таким образом, но я думаю, что это должно быть возможно.

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

В любом случае, когда вы получаете обратный вызов, вам нужно проверить, какие задачи действительно просрочены. Если опрос БД для этой проверки является проблемой производительности (чего я не ожидал бы в большинстве случаев), вы всегда можете кэшировать предстоящие сроки. Убедитесь, что вы обновили кэш соответствующим образом, например, прослушивая "опубликованные задачи" доменных событий.

Другие вопросы по тегам