Доменные события, которые произойдут в будущем - PullRequest
0 голосов
/ 17 мая 2018

Должен ли ограниченный контекст отвечать за возникновение событий для будущих датированных вещей?

Рассмотрим сценарий, в котором у человека есть набор заданий. Работа может быть прекращена в будущем. Домен вызовет событие «JobEndScheduled» в тот момент, когда в задание будет добавлена ​​дата окончания. Должен ли домен также вызывать событие "JobEnded" во время фактического завершения задания?

Мне бы очень хотелось получить обратную связь от сообщества, так как это должно быть распространенной проблемой. Я не вижу ничего об этом ни в одной из книг DDD. У меня есть четкое представление об ответе, но я не хотел бы влиять на какие-либо ответы на данный момент.

Большое спасибо ...

Примечание: на прошлой неделе я задавал похожий вопрос, но я слишком сосредоточился на аспекте именования, а не на самих событиях. Надеюсь, этот вопрос яснее!

1 Ответ

0 голосов
/ 17 мая 2018

Рассмотрим сценарий, в котором у человека есть набор заданий.Работа может быть прекращена в будущем.Домен вызовет событие «JobEndScheduled» в тот момент, когда в задание будет добавлена ​​дата окончания.Должен ли домен также вызывать событие «JobEnded» во время фактического завершения задания?

Это зависит от того, существует ли ценность для бизнеса, полученная при документировании фактического завершения задания?

много доменов, ответ да: сам факт того, что что-то планируется, отличается от того факта, что что-то произошло.Явное моделирование этих двух фактов значительно упрощает работу остальной части домена.

Рассматривая банковские операции - при просмотре истории транзакций часто различные переводы находятся в состоянии «ожидания»;модель ожидает , что что-то случится, но свидетельство того, что это произошло , еще не пришло.

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

В примере человека / рабочих мест это просто происходит, потому что время истекло.

Время не истекло - время на входе;см. эту идею Джон Кармак

If you don't consider time an input value, think about it until you do -- it is an important concept.

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

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

Так работает календарь Google - вы можете вернуться назад и посмотреть на вещи, которые былив вашем календаре в прошлом.

...