Skip to content

Clean up high-value dependency directions within the domain taxonomy #105

Description

@kelchm

Motivation

The taxonomy established by #102 and #103 is intentionally navigational: domain folders and namespaces are not general-purpose dependency boundaries. That remains the right default.

A few high-value seams nevertheless have bidirectional or misplaced dependencies that obscure ownership. Cleaning them up would make those areas easier to test and evolve without introducing additional assemblies or changing the namespace scheme.

Scope

Address the following seams as small, independent changes:

  • Core Devices ↔ Transport: remove unnecessary cross-direction references around FanatecWheelbase, FanatecTransport, and Col03FrameClassifier constants by placing shared contracts or protocol facts with a clear owner.
  • Plugin Devices ↔ UI.Devices: stop FanatecDevicesRegistry from directly constructing UI panel factories while UI also references device types; IDevicePanelFactory is the natural contract-placement seam.
  • Updater HTTP ownership: move GitHubHttpClient from the plugin’s Updates/ domain into FanaBridge.Updater, whose audit boundary should contain the code making update-related network requests. Its only plugin-specific input is currently a version string.
  • Plugin composition root: move update orchestration out of FanatecPlugin into an Updates/UpdateCoordinator, leaving the entry point responsible for composition and lifecycle delegation.

This is dependency-direction cleanup within the ratified taxonomy. It does not propose new assemblies, a new layering model, or changes to the folder-to-namespace convention. The items may land as separate PRs.

Acceptance criteria

  • Core device and transport code no longer depend on each other merely to share constants or protocol contracts.
  • The device registry no longer constructs concrete UI.Devices panel factories directly.
  • IDevicePanelFactory and related abstractions have an owner that permits one-way dependency flow between device registration and UI implementation.
  • Update-related HTTP requests are owned by FanaBridge.Updater.
  • Update orchestration is encapsulated in Updates/UpdateCoordinator and invoked by FanatecPlugin.
  • No new production assemblies are introduced.
  • The existing namespace convention and documented project reference rules remain intact.
  • Existing behavior and tests remain green, with focused coverage added for newly extracted contracts or orchestration.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions