【发布时间】:2013-02-12 12:09:11
【问题描述】:
在我的 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();
}
}
}
}
【问题讨论】:
-
我会拥有
GetAllPendingJobs,它只会返回那些应该运行的人。但我看不出这与 DDD 有什么关系? -
感谢您的回复——我认为这与域驱动器设计有很大关系……尤其是我们如何将应用层与模型接口。此外,您是否希望存储库知道何时应该运行作业(基于日期/时间)?知道何时运行不是作业的责任吗?
标签: design-patterns domain-driven-design