/** * Registers a command handler * * @param string $commandClass The full command class name * @param CommandHandler $handler The command handler * * @return void * * @throws InvalidCommandException When the command class is not valid */ public function registerHandler($commandClass, CommandHandler $handler) { if (!Test::implementsInterface($commandClass, Command::class)) { $message = sprintf('Invalid command class: %s', $commandClass); throw InvalidCommandException::create($message); } $type = Type::create($commandClass)->toString(); $this->handlers[$type] = $handler; }
/** * Registers a query handler * * @param string $queryClass The full query class name * @param QueryHandler $handler The query handler * * @return void * * @throws InvalidQueryException When the query class is not valid */ public function registerHandler($queryClass, QueryHandler $handler) { if (!Test::implementsInterface($queryClass, Query::class)) { $message = sprintf('Invalid query class: %s', $queryClass); throw InvalidQueryException::create($message); } $type = Type::create($queryClass)->toString(); $this->handlers[$type] = $handler; }
/** * Registers a responder * * @param string $actionClass The full action class name * @param Responder $responder The responder * * @return void * * @throws LogicException When the action class is not valid */ public function registerResponder($actionClass, Responder $responder) { if (!Test::implementsInterface($actionClass, Action::class)) { $message = sprintf('Invalid action class: %s', $actionClass); throw new LogicException($message); } $type = Type::create($actionClass)->toString(); $this->responders[$type] = $responder; }