package cqrs import ( "context" ) type Bus interface { RegisterCommandHandler(cmd Command, handler CommandHandler) RegisterQueryHandler(query Query, handler QueryHandler) RegisterEventHandler(event Event, handler EventHandler) UseCommandMiddleware(middleware CommandMiddleware) UseQueryMiddleware(middleware QueryMiddleware) UseEventMiddleware(middleware EventMiddleware) ExecuteCommand(ctx context.Context, cmd Command) ([]Event, error) ExecuteQuery(ctx context.Context, query Query) (interface{}, error) EmitEvent(ctx context.Context, event Event) error }