私の DDD モデルでは、特定のユーザー ストーリーをホストし、リポジトリ/エンティティ/ドメイン サービスを整理できるようにするアプリケーション サービスがあります。
時間指定されたスケジュールでアプリケーション サービスを呼び出す必要があります。このスケジュールは、ジョブ リポジトリから取得したモデル自体で定義されています。この投稿へのコメントでは、実行するジョブのリストを含むリポジトリが GetPendingJobs() を返すように親切に言及されています。
各ジョブは cron ジョブ文字列を受け取り、アプリケーション サービス (SyncAccounts など) を呼び出します。
私の質問は次のとおりです。
これをスレッドでポーリングできることはわかっていますが、エンティティ ドメイン サービスのどこに配置するか、またはドメイン モデルの外部 (おそらくアプリケーションとプレゼンテーションの間のレイヤー) として配置するのでしょうか?
GetPendingJobs() を返すジョブ リポジトリのコメントで述べたように、これが現在の日付/時刻に基づいている場合、いつ実行するかを知るのはリポジトリの責任ですか、それとも Job エンティティの責任ですか (現在の日付時刻をその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();
}
}
}
}