Command Bus (Dart)
Минималистичная библиотека для регистрации и выполнения команд через связанные обработчики.
Компоненты
Command<R>— описание намерения выполнить действие и ожидаемого результатаR.CommandHandler<C, R>— знает, как выполнить командуCи вернутьR.CommandBus— регистрирует обработчики, вызывает их черезdispatchиdispatchSafe.- Middleware — опциональная цепочка, выполняемая после
dispatch, но до обработчика (логирование, метрики, транзакции и т.д.). Result<R>— типизированная обёртка результата с данными или ошибкой дляdispatchSafe.
Быстрый старт
import 'package:command_bus/command_bus.dart';
class GetLength extends Command<int> {
final String value;
const GetLength(this.value);
}
class GetLengthHandler extends CommandHandler<GetLength, int> {
@override
int handle(GetLength command) {
if (command.value.isEmpty) throw ArgumentError('String must not be empty');
return command.value.length;
}
}
Future<void> main() async {
final bus = CommandBus();
bus.register(GetLengthHandler());
final length = await bus.dispatch(const GetLength('Hello'));
print(length); // 5
final safe = await bus.dispatchSafe(const GetLength(''));
print(safe); // Result.failure(error: ArgumentError('...'))
}
Более развернутый пример находится в example/command_bus_example.dart.
Libraries
- command_bus
- Минимальная реализация Command Bus для Dart.