usar los patrones de comando y diseño de fábrica para ejecutar trabajos en cola
Tengo una lista de trabajos en cola en la base de datos que necesito leer de la base de datos y ejecutarlos en paralelo usando subprocesos y tengo una lista de clases de comando para ejecutar cada uno de esos trabajos, todos implementando una interfaz común (patrón de comando). pero cuando recupere los trabajos pendientes de la base de datos, necesitaré crear una instancia del objeto de comando correcto para cada trabajo, algo como esto (en una clase de fábrica)
ICommand command;
switch (jobCode)
{
case "A":
command = new CommandA();
break;
case "B":
command = new CommandB();
break;
case "C":
command = new CommandC();
break;
}
command.Execute();
¿Existe una mejor manera de crear el objeto de comando correcto sin usar una instrucción de cambio grande como la anterior? ¿O hay algún otro patrón para ejecutar los trabajos en cola?
Solution: resuelto de esta manera (según la respuesta seleccionada). Esto hará una instanciación perezosa de los objetos de comando.
public class CommandFactory
{
private readonly IDictionary<string, Func<ICommand>> _commands;
public CommandFactory()
{
_commands = new Dictionary<string, Func<ICommand>>
{
{"A", () => new CommandA()},
{"B", () => new CommandB()},
{"C", () => new CommandC()}
};
}
public ICommand GetCommand(string jobKey)
{
Func<ICommand> command;
_commands.TryGetValue(jobKey.ToUpper(), out command);
return command();
}
}
Client:
var factory = new CommandFactory();
var command = factory.GetCommand(jobKey);
command.Execute();