私は初めてコマンドパターンを使用しています。私は依存性をどのように処理すべきか少し不明です。コマンドパターン使用時の依存性注入
以下のコードでは、CreateProductCommand
を送信し、後で実行するようにキューに入れます。このコマンドは、実行する必要があるすべての情報をカプセル化します。
この場合、製品を作成するために、ある種のデータストアにアクセスする必要があります。私の質問は、この依存関係をコマンドに注入して実行する方法です。
public interface ICommand { }
public interface ICommandHandler<TCommand> where TCommand : ICommand {
void Handle(TCommand command);
}
public class CreateProductCommand : ICommand { }
public class CreateProductCommandHandler : ICommandHandler<CreateProductCommand> {
public void Handle(CreateProductCommand command) {
}
}
このシナリオ:
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);
}
}
感謝
ベン
ありがとうございます。ツイッターのCQRSフォークもこの方向に私を指摘していました。 –
CQRSがなくても、上記のようなデザインには大きなメリットがあります。ここには[このパターンに関する有益な記事](http://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=91)があります。 – Steven