2016-08-12 1 views
0

Ich arbeite an der Entwicklung eines Job-Queue-System, wo Jobs zu einer zentralen Warteschlange hinzugefügt werden können. Prozessor liest dann Jobs der Warteschlange, führt sie aus und speichert die Ergebnisse irgendwo.Sollen die Eingabeoptionen in die Ergebnisse einer Job-/Aufgabenwarteschlange einbezogen werden?

Jeder Job enthält eine Liste der Aufgaben, die in der richtigen Reihenfolge ausgeführt werden müssen, und die Optionen, die beim Ausführen des Jobs und der Aufgaben verwendet werden.

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; } 
} 

Die Prozessoren werden die Ergebnisse für die Jobs und die damit verbundenen Aufgaben zurück, die erkennt, wenn der Job und Aufgaben erfolgreich und verfügt über eine Nachricht, um die Ergebnisse zu beschreiben.

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; } 
} 

Doch wenn ich eine Art von GUI oder Bericht der Ergebnisse einer Arbeit schaffen zeigt ich auch die Details und Optionen des Jobs selbst und nicht nur die Ergebnisse allein zeigen wollen würde. Eine Möglichkeit, dies zu tun, ist es, nur einen Verweis auf die Job in die JobResult Klasse hinzuzufügen.

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 
} 

Doch mit diesem gibt es keine direkte Verbindung zwischen der Aufgabe und TaskResult andere dann ihre Position in den jeweiligen Listen.

Alternativ könnten JobResult und Task einfach von Job und Task erben bzw. Ergebnisstatuseigenschaften hinzufügen.

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; } 
} 

Wie funktionieren Systeme wie dieses normalerweise? Es ist eine schlechte Idee/Code-Geruch, eine Kopie der Eingabe mit den Ergebnissen zurückzugeben?

Antwort

0

Ich stimme für die Zuordnung JobResult mit Job, weil ein Job ist kein JobResult und umgekehrt.

A JobResulthat einen zugehörigen Job und in der objektorientierten Programmierung Welt, eine hat eine Beziehung bedeutet composition.

+0

Ah ja, guter Punkt. Es ist definitiv eine "hat eine" Beziehung. Was halten Sie von meinem obigen Update bezüglich des Weglassens der separaten Ergebnisklassen und der Kombination der Ergebnisse in den Job- und Task-Klassen? –

+0

@EricAnastas Ehrlich gesagt würde ich deine neuen Inhalte entfernen und ich würde eine neue Frage hinzufügen. Du kannst eine Frage nicht über die Zeit hinaus erweitern und ein Q & A in einen Echtzeit-Chat verwandeln ............ –

+0

@EricAnastas Du hast etwas sehr Konkretes gefragt und ich habe es beantwortet. Wenn es für Sie nützlich war, sollten Sie meine Antwort als die akzeptierte markieren und die andere Frage als Teil eines neuen Fragetexts kopieren –

Verwandte Themen