输入选项是否应该包含在 job/task 队列中的结果中?

Should the input options be included with the results in a job/task queue?

我正在开发一个作业队列类型系统,可以将作业添加到中央队列。处理器然后读取队列的作业,运行 它们,并将结果存储在某处。

每个作业都包含要按顺序执行的任务列表以及在 运行设置作业和任务时要使用的选项。

public class Job
{
    public Guid JobId { get; set; }
    public string Name { get; set; }
    public DateTime Created { get; set; }
    public string CreatedBy { get; set; }
    IDictionary<string, string> Options { get; set; }
    public IList<Task> Tasks { get; set; }
}

public class Task
{
    public string Command { get; set; }
    IDictionary<string, string> Options { get; set; }
}

处理器将 return 作业和相关任务的结果,这些结果确定作业和任务是否成功,并包含一条描述结果的消息。

public class JobResult
{
    public Guid JobId { get; set; }
    public bool Succeeded { get; set; }
    public string StatusMessage { get; set; }
    IList<TaskResult> TaskResults { get; set; }
}

public class TaskResult
{
    public bool Succeeded { get; set; }
    public string StatusMessage { get; set; }
}

然而,如果我要创建某种显示作业结果的 GUI 或报告,我还想显示作业本身的详细信息和选项,而不仅仅是结果。我想这样做的一种方法是将对 Job 的引用添加到 JobResult class.

public class JobResult
{
    public Guid JobId { get; set; }
    public bool Succeeded { get; set; }
    public string StatusMessage { get; set; }
    IList<TaskResult> TaskResults { get; set; }

    public Job Job {get; set;} <-- Add Job details to JobResult
}

然而,除了它们在各自列表中的位置之外,Task 和 TaskResult 之间没有直接关联。

或者,JobResult 和 Task 可以简单地继承自 Job 和 Task,分别添加结果状态属性。

public class JobResult: Job
{
    public bool Succeeded { get; set; }
    public string StatusMessage { get; set; }
}

public class TaskResult: Task
{
    public bool Succeeded { get; set; }
    public string StatusMessage { get; set; }
}

这样的系统通常如何工作? idea/code 将输入的副本与结果一起 return 是不是很糟糕?

我投票赞成将 JobResultJob 相关联,因为 Job 不是 JobResult,反之亦然。

一个JobResult有一个关联的Job,在面向对象的编程世界里,一个有一个关系表示composition.