@ddd-master/command-bus
v1.0.0
Published
Command bus implementation
Downloads
305
Maintainers
Readme
@ddd-master/command-bus package
The @ddd-master/command-bus
package is a TypeScript library that provides an implementation of the command bus pattern for Domain-Driven Design (DDD) applications. It allows you to execute commands and perform actions in a centralized and decoupled manner.
Installation
You can install the @ddd-master/command-bus
package using npm:
npm install @ddd-master/command-bus
Usage
To use the @ddd-master/command-bus
package, you need to define your commands and command handlers.
Defining Commands
Commands represent actions or requests for changes in the system. You can define a command by implementing the ICommand
interface. For example:
export interface ICreateUserCommand extends ICommand {
email: string;
password: string;
}
export class CreateUserCommand implements ICreateUserCommand {
public readonly email: string;
public readonly password: string;
public constructor({ email, password }: ICreateUserCommand) {
this.email = email;
this.password = password;
}
}
Defining Command Handlers
Command handlers are responsible for executing commands and performing the necessary actions. You can implement the ICommandHandler
interface to define your command handlers. For example:
export class CreateUserCommandHandler implements ICommandHandler<ICreateUserCommand, CreateUserCommandHandlerResult> {
private readonly userRepository: UserRepository;
public constructor({ userRepository }: Dependencies) {
this.userRepository = userRepository;
}
public handle(command: ICommand): CreateUserCommandHandlerResult {
const { email, password } = command as ICreateUserCommand;
const createdUser: User = { email, password };
this.userRepository.save({ user: createdUser });
return { email, password };
}
}
Registering Command Handlers
Once you have your command handlers, you need to register them with the command bus. For example:
const commandBus = new CommandBus();
const createUserCommandHandler = new CreateUserCommandHandler();
commandBus.register(CreateUserCommand, createUserCommandHandler);
Executing Commands
To execute a command, you can use the execute
method of the command bus. For example:
const result = commandBus.execute<ICreateUserCommand, CreateUserCommandHandlerResult>(
new CreateUserCommand({ email: '[email protected]', password: '123456' }),
);
const { email, password } = result;
console.log(email, password);
The execute
method returns the result of the command handler. You can access the result and process it accordingly.
Contributing
Contributions to the @ddd-master/command-bus
package are welcome! Feel free to open issues or submit pull requests on the GitHub repository. Please follow the code of conduct when contributing.
License
The @ddd-master/command-bus
package is open-source software licensed under the MIT License.