Tengo un código que actualiza una lista de personas para enviarlas por correo electrónico. Esta lista se actualiza a menudo, con personas que se agregan y eliminan antes de llamar a la parte real del código. Actualmente mi código para encargarme de esto es algo como esto:Pensando en usar el patrón de diseño de comando
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 complicado y no me gusta. He estado pensando en implementar el patrón de diseño Command
en su lugar. Mi idea de qué crear dos comandos:
- SendAllocatedInstructorEmailCommand
- SendDeallocatedInstructorEmailCommand
Cuando un instructor se asigna a un curso, entonces yo nuevo en marcha un SendAllocatedInstructorEmailCommand
y añadirlo a CommandInvoker.SetCommand
para su uso posterior . Del mismo modo, crearía un objeto SendDeallocatedInstructorEmailCommand
para aquellos instructores que son sacados de un curso.
Ese es el problema.
Si he creado un objeto SendAllocatedInstructorEmailCommand
para Instructor A
y después de la línea Instructor A
se desasigna del curso (antes de que los datos de la página se ha guardado, o mensajes de correo electrónico enviado), entonces es necesario eliminar la SendAllocatedInstructorEmailCommand
que yo construido antes.
¿Qué es una forma limpia de buscar comandos que ya hacen referencia a Instructor A
, para que pueda eliminarlos? No puedo usar un método Undo
en mis comandos ya que los correos electrónicos ya se han enviado a través del SendAllocatedInstructorEmailCommand
.
Estaba pensando en agregar algún tipo de método Query
a mi objeto CommandInvoker
, pero no estoy seguro si ese es un plan pobre.
¿Debería utilizar el patrón de diseño Command
? Se ve como una muy buena forma de poner en cola estos correos electrónicos.
Saludos. Jas.
No estoy seguro de seguir. ¿Por qué necesita eliminar el 'SendAllocatedInstructorEmailCommand'? ¿Es independiente de consultar a los comandos que ya hacen referencia al 'Instructor A'? –