-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
enhancementNew feature or requestNew feature or request
Description
Summary
Circular dependency exists between Rdmp.Core.Curation and Rdmp.Core.DataExport namespaces, preventing clean architectural layering.
Evidence
Curation β DataExport references:
Rdmp.Core/Curation/FilterImporting/DeployedExtractionFilterUIOptions.cs:
using Rdmp.Core.DataExport.Data;
Rdmp.Core/Curation/FilterImporting/FilterUIOptionsFactory.cs:
using Rdmp.Core.DataExport.Data;
Rdmp.Core/Curation/Data/IExtractionResults.cs:
using Rdmp.Core.DataExport.Data;
DataExport β Curation references:
Rdmp.Core/DataExport/Checks/GlobalsReleaseChecker.cs:
using Rdmp.Core.Curation.Data;
Rdmp.Core/DataExport/Checks/ExtractionConfigurationChecker.cs:
using Rdmp.Core.Curation.Data;
(Many more files...)
Impact
- Cannot cleanly separate concerns
- Testing becomes difficult (need both namespaces)
- Potential for circular initialization issues
- Prevents proper layering
- Makes it hard to understand dependencies
Recommended Solution
Option 1: Extract Shared Interfaces
Create Rdmp.Core.Contracts assembly:
Rdmp.Core.Contracts/
βββ IExtractionResults.cs
βββ IFilterOptions.cs
βββ IExtractionConfiguration.cs
Both Curation and DataExport depend on Contracts, but not on each other.
Option 2: Dependency Inversion
Move shared interfaces to Curation (the "lower" layer), have DataExport depend only on interfaces.
Option 3: Merge Namespaces
If the coupling is fundamental, consider merging into a single namespace with sub-namespaces.
Implementation Steps
- Identify all cross-references between namespaces
- Categorize as: shared interfaces, shared entities, or true coupling
- Extract shared interfaces to contracts assembly
- Update references to use interfaces
- Verify no remaining circular references
Labels
architecture, technical-debt
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request