私はCQRSの指揮部の設計についていくつかの考えを持っています。私は自分の考えをあなたの意見を聞きたい。前もって感謝します! :)CQRS:ICommandExecutor.Execute()メソッドで結果を返すのは良いですか?
CQRSには、コマンドとCommandExecutorsがあります。場合によっては、コマンド実行プログラムが実行完了後に結果を返すようにしたい場合もあります。可能な解決策の1つは、(C#):
public interface ICommandExecutor<TCommand>
{
void Execute(TCommand cmd);
}
public interface ICommandExecutor<TCommand, TResult>
{
TResult Execute(TCommand cmd);
}
これまでのところ良いです。 2つのコマンド実行インタフェースを使用します。クライアントコードを見てみましょう:
var cmd = new MyCommand();
commandBus.Execute(cmd); // execute no result
commandBus.Execute<MyResult>(cmd); // execute result
はい、私たちは今すぐexeuctorに結果を返させることができます。しかし、プログラマは、上記のコードを書くときに混乱するかもしれません:このコマンドは実行されるかどうか?答えを得るために、プログラマーは、MyCommandExecutorかMyCommandExecutorがあるかどうかを見るためにフレームワークのソースコードを調べる必要があります。これは悪いです!とても混乱するような!
私の意見では、DELETEICommandExecutor<TCommand, TResult>
です。 つまり、私はコマンド実行者は常にvoidを返すべきだと思います。 ICommandExecutor<TCommand, TResult>
のデザインが悪いです!
コマンド実行後に何が変更されるかを確認する必要がある場合。 commandBus.Execute(cmd)を呼び出した後、データベースに新しいクエリを作成する必要があります。
あなたはどう思いますか?
"出力プロパティ"はかなり良い解決策です。ありがとう!ところで、私もフリーランスです;) –