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.