Tdefining the query return type) interfaces. These interfaces are empty on their own and only define the contract of being processable by a command bus.
IQueryHandler<TQuery, TResult>respectively. For every command or query type, there should be exactly one handler type registered in the dependency container, otherwise an exception will be thrown when trying to handle it.
ICommandBuswhich encapsulates most of the command processing details.