Ich habe einige Code, der eine Liste von Personen aktualisiert, um eine E-Mail. Diese Liste wird häufig aktualisiert, wobei Personen hinzugefügt und entfernt werden, bevor der eigentliche "send email" -Teil des Codes aufgerufen wird. Momentan ist mein Code, um sich um dieses zu kümmern, etwas in der Art:Nachdenken über die Verwendung von Command Design Pattern
if (instructorEmailType == InstructorEmailType.AddToCourse)
{
// If instructor not already in the list, then put them in.
if (!this.InstructorsToEmail.ContainsKey(courseInstructor))
{
this.InstructorsToEmail.Add(courseInstructor, InstructorEmailType.AddToCourse);
}
else
{
// If instructor already in the list, and marked for removal, then get rid
// of that entry from the list.
if (this.InstructorsToEmail[courseInstructor] == InstructorEmailType.RemoveFromCourse)
{
this.InstructorsToEmail.Remove(courseInstructor);
}
}
}
else
{
if (this.InstructorsToEmail.ContainsKey(courseInstructor))
{
this.InstructorsToEmail.Remove(courseInstructor);
}
else
{
this.InstructorsToEmail.Add(courseInstructor, InstructorEmailType.RemoveFromCourse);
}
}
Es ist kompliziert und ich mag es nicht. Ich habe darüber nachgedacht, stattdessen das Command
Entwurfsmuster zu implementieren. Meine Idee, was zwei Befehle zu erstellen:
- SendAllocatedInstructorEmailCommand SendDeallocatedInstructorEmailCommand
Wenn ein Lehrer zu einem Kurs zugeordnet ist, dann würde ich neu-up ein SendAllocatedInstructorEmailCommand
und fügen Sie es CommandInvoker.SetCommand
für den späteren Gebrauch . Ebenso würde ich ein SendDeallocatedInstructorEmailCommand
Objekt für jene Ausbilder schaffen, die von einem Kurs genommen werden.
Das ist das Problem.
Wenn ich ein SendAllocatedInstructorEmailCommand
Objekt für Instructor A
erstellt haben und später auf der ganzen Linie ist Instructor A
aus dem Kurs ausgeplant (bevor Daten auf der Seite gespeichert wurde, oder E-Mails gesendet werden), dann muss ich die SendAllocatedInstructorEmailCommand
löschen, die ich früher gebaut.
Was ist eine saubere Art der Suche nach Befehlen, die bereits auf Instructor A
verweisen, so dass ich sie löschen kann? Ich kann keine Undo
Methode auf meinen Befehlen verwenden, da die E-Mails bereits über die SendAllocatedInstructorEmailCommand
gesendet wurden.
Ich dachte über das Hinzufügen einer Art von Query
Methode zu meinem CommandInvoker
Objekt, aber ich bin mir nicht sicher, ob das ein schlechter Plan ist.
Sollte ich das Command
Entwurfsmuster überhaupt verwenden? Es ist eine wirklich nette Art, diese E-Mails in die Warteschlange zu stellen.
Prost. Jas.
Ich bin mir nicht sicher, ob ich folge. Warum müssen Sie den 'SendAllocatedInstructorEmailCommand' löschen? Ist es unabhängig von der Abfrage von Sätzen, die bereits auf "Instructor A" verweisen? –