Отправка Напоминание - это Служба . Тот факт, что Напоминание было отправлено, может быть зафиксирован как DomainEvent , но фактическая отправка Напоминание является либо ApplicationService , либо DomainService в зависимости от вашего приложения.
SendReminderService следует вызывать в указанные c моменты времени до истечения срока действия, поэтому вам потребуется Планировщик заданий , который будет вызывать эту службу через определенные интервалы c или отправлять SendReminderForTodayCommand .
. Вы можете смоделировать это, добавив концепцию Напоминание в явном виде и создание событий при отправке напоминания. Вам также понадобится ScheduleReminderService .
В примере с паролем вы можете запланировать Напоминание , когда Пользователь регистрируется и когда он меняет свое пароль.
Вот пример:
public class Reminder : Entity {
public Details ReninderDetails { get; private set; }
public Date SendAt { get; private set; }
public bool WasSent { get; private set; }
public void MarkAsSent() {
WasSent = true;
AddEvent(new ReminderSent(ReninderDetails));
}
}
public class ScheduleReminderService {
public void ScheduleReminder(Date remindAt) {
var reminder = Reminder.ForDate(RremindAt);
ReminderRepository.Add(reminder);
}
}
public class SendRemindersService {
public void SendReminders() {
var reminders = ReminderRepository.GetScheduledReminders(Date.Today);
foreach(var reminder in reminders) {
SendReminder(reminder);
reminder.MarkAsSent();
ReminderRepository.Save(reminder);
}
}
}