Estoy usando el patrón de comando por primera vez. Estoy un poco inseguro de cómo debo manejar las dependencias.Inyección de dependencia al utilizar el patrón de comando
En el siguiente código, enviamos un CreateProductCommand
que luego se pone en cola para ser ejecutado en otro momento. El comando encapsula toda la información que necesita para ejecutar.
En este caso, es probable que tengamos que acceder a un almacén de datos de algún tipo para crear el producto. Mi pregunta es, ¿cómo inyecto esta dependencia en el comando para que se pueda ejecutar?
public interface ICommand {
void Execute();
}
public class CreateProductCommand : ICommand {
private string productName;
public CreateProductCommand(string productName) {
this.ProductName = productName;
}
public void Execute() {
// save product
}
}
public class Dispatcher {
public void Dispatch<TCommand>(TCommand command) where TCommand : ICommand {
// save command to queue
}
}
public class CommandInvoker {
public void Run() {
// get queue
while (true) {
var command = queue.Dequeue<ICommand>();
command.Execute();
Thread.Sleep(10000);
}
}
}
public class Client {
public void CreateProduct(string productName) {
var command = new CreateProductCommand(productName);
var dispatcher = new Dispatcher();
dispatcher.Dispatch(command);
}
}
Muchas gracias
Ben
gracias por eso. La gente de CQRS en twitter también me había señalado en esta dirección. –
E incluso sin CQRS, un diseño como se indicó anteriormente tiene grandes beneficios. Aquí hay un [artículo informativo sobre este patrón] (http://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=91). – Steven