使用我的 DDD 模型,我拥有托管特定用户故事并允许组织存储库/实体/域服务的应用程序服务 - 据我了解,这是域驱动设计分层的常见部分,如下所示:
我需要按定时计划调用应用程序服务,该计划是在从作业存储库获得的模型本身中定义的。对这篇文章的评论请提到让存储库返回 GetPendingJobs() 以及要运行的作业列表。
每个作业都需要一个 cron 作业字符串,并将调用一个应用程序服务(例如 SyncAccounts)。
我的问题是:
我知道我们可以在线程上轮询它,但是它会放在哪里,在实体域服务中,或者作为域模型外部的东西(可能是应用程序和表示之间的层)?
正如在返回 GetPendingJobs() 的作业存储库的评论中提到的,如果这是基于当前日期/时间,那么存储库是否有责任知道何时运行,或者作业实体(检查当前日期时间与它的 cronjob 字符串)?
下面的代码:
namespace DomainServices
{
public class JobSchedule
{
private readonly JobsRepository repo;
JobSchedule(JobsRepository repo)
{
this.repo = repo;
}
public void Poll()
{
var jobs = this.repo.GetAllJobs();
foreach(var job in jobs)
{
if(job.IsTimeToRun())
job.Run();
}
}
}
}