Question: I have some thoughts on the design of the commanding part in CQRS. I want to hear your opinions on my thoughts. Thanks in advance! :)

In CQRS, there're Commands and CommandExecutors. Sometimes we want command executors to return some result after execution complete. One possible solution is (C#):

```
public interface ICommandExecutor<TCommand>
{
    void Execute(TCommand cmd);
}

public interface ICommandExecutor<TCommand, TResult>
{
    TResult Execute(TCommand cmd);
}

```

Good so far. We use two command executor interfaces. Now let's see the client code:

```
var cmd = new MyCommand();
commandBus.Execute(cmd);  // execute no result
commandBus.Execute<MyResult>(cmd); // execute result

```

Yes, we can let exeuctor returns result now. But the programmer might be confusing when writing the above code: Can this command be executed result or not?? To get the answer, the programmer need to look into the framework source code to see if there's a MyCommandExecutor or a MyCommandExecutor. This is bad! Very confusing!

So, in my opinion, we should **DELETE** `ICommandExecutor<TCommand, TResult>`. 
That is, **I think command executors should always return void. The design of `ICommandExecutor<TCommand, TResult>` is bad!**

If we need to see what is changed after command execution. We should make a new query to the database after calling commandBus.Execute(cmd).

What do you think about that?

Answer: 
In CQRS the command side should not return anything since it breaks the anatomy of the pattern. Your own thoughts about this are correct.

However, Greg Young often mention an Ack/Nack result of a command operation (or used to anyway). Most messaging frameworks support such responses. The drawback of expecting a result is that you cannot be fully asynchronous. I have never felt a need for Ack/Nack since one of the fundamentals of CQRS is that the command should always succeed so there's no point returning Ack/Nack.

Ask yourself what you need to return. What operation need to return information that you don't already have on the sending/commanding side? Take the time to figure that out before letting your commands become queries.
Strictly speaking if you are using command patter it should not return anything but it should be always `void`. You should use another command (query) to get any data 

<http://www.dofactory.com/Patterns/PatternCommand.aspx#_self1>