Skip to content

Extract ListenerOptions dataclass to reduce Listener.create() parameter fan-out #438

@jessica-claude

Description

@jessica-claude

Description

Listener.create() accepts 12 parameters. Adding a new listener option (e.g., max_retries, timeout) requires changes across 5 layers:

  1. Listener dataclass fields
  2. Listener.create() signature
  3. Bus.on() signature
  4. Bus._subscribe() Options TypedDict
  5. Every on_* method that passes **opts

Proposed Change

Extract a ListenerOptions dataclass from the behavioral parameters (once, debounce, throttle, priority). Bus.Options TypedDict becomes a constructor for it. Listener.create() takes a single options: ListenerOptions instead of 4 separate parameters. Future options are added in one place.

Acceptance Criteria

  • ListenerOptions dataclass exists with once, debounce, throttle, priority
  • Listener.create() accepts options: ListenerOptions instead of 4 separate params
  • Adding a new option only requires changes in 2 places (ListenerOptions + implementation)
  • All tests pass

Source: challenge finding from #434 review (systems architect).

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    Status

    Refinement

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions