即使域模型中没有状态更改,业务提醒是否可以建模为域事件?
为了前夫。
发送通知给客户,您的密码将在这样和那样的日期过期?
向客户发送电子邮件,要求您及时缴纳会费,否则罚款将被收取(缴费提示)
(我们通常在截止日期之前发出这些提醒)
发布于 2020-01-14 11:55:30
发送提醒是服务。发送了一个ApplicationService提醒这一事实可以被捕获为一个DomainEvent,但是实际发送提醒要么是一个,要么是一个DomainService,这取决于您的应用程序。
应该在到期前的特定时间点调用SendReminderService,因此您将需要一个作业计划程序,它可以在特定的时间间隔内调用服务,也可以发送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);
}
}
}https://stackoverflow.com/questions/59730667
复制相似问题