Skip to main content

CommandBus

The CommandBus handles commands (mutations/actions) in a CQRS architecture.

Class Definition

class CommandBus implements CommandBusInterface {
constructor(props?: CommandBusConstructorProps);

dispatch<TCommand extends UntypedCommandType>(
command: TCommand
): Promise<void>;

register<TCommand extends UntypedCommandType>(
handler: CommandHandlerInterface<TCommand>
): void;
}

Constructor

new CommandBus(props?: CommandBusConstructorProps)

Creates a new CommandBus instance.

Parameters:

  • props?: CommandBusConstructorProps - Optional configuration
    interface CommandBusConstructorProps {
    remoteSender?: RemoteCommandSenderInterface | null;
    monitoringService?: MonitoringService | null;
    }

Example:

const commandBus = new CommandBus();
// or with options
const commandBus = new CommandBus({
remoteSender: myRemoteSender,
monitoringService: myMonitoringService,
});

Methods

register<TCommand>(handler: CommandHandlerInterface<TCommand>): void

Registers a command handler.

Type Parameters:

  • TCommand - The command type (must extend UntypedCommandType)

Parameters:

  • handler: CommandHandlerInterface<TCommand> - The handler function
    interface CommandHandlerInterface<TCommand extends UntypedCommandType> {
    (command: TCommand): Promise<void>;
    }

Example:

commandBus.register(async (command: CreateTodoCommand) => {
// Handle command
await todosRepository.create(command.payload);
});

dispatch<TCommand>(command: TCommand): Promise<void>

Dispatches a command to registered handlers.

Type Parameters:

  • TCommand - The command type

Parameters:

  • command: TCommand - The command to dispatch

Returns: Promise<void> - Resolves when the command is handled

Example:

const command = new CreateTodoCommand({ text: "Learn xndr" });
await commandBus.dispatch(command);

Interface

interface CommandBusInterface {
dispatch<TCommand extends UntypedCommandType>(
command: TCommand
): Promise<void>;

register<TCommand extends UntypedCommandType>(
handler: CommandHandlerInterface<TCommand>
): void;
}