-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
enhancementNew feature or requestNew feature or request
Description
Summary
Several classes have grown too large and violate Single Responsibility Principle. The largest offender is CatalogueChildProvider at 1,958 lines with 40+ AddChildren method overloads.
Critical God Classes
1. CatalogueChildProvider.cs - 1,958 lines
File: Rdmp.Core/Providers/CatalogueChildProvider.cs
Issues:
- 92+ methods (including 40+ overloaded
AddChildrenmethods) - Manages hierarchical relationships for ALL catalogue entities
- Combines caching, hierarchy building, and object navigation
- 60+ public properties for different entity types
Current Responsibilities (should be separate):
- Object caching (
AllLoadMetadatas,AllCatalogues,AllProcessTasks, etc.) - Hierarchy construction (40+
AddChildrenoverloads) - Descendancy tracking (
_childDictionary,_descendancyDictionary) - Object lookup and navigation
- Performance optimization
2. Catalogue.cs - 1,591 lines
File: Rdmp.Core/Curation/Data/Catalogue.cs
Issues:
- 56+ public methods
- 70+ database-mapped properties
- Mixes data access, business logic, validation, and presentation concerns
3. DataExportChildProvider.cs - 928 lines
File: Rdmp.Core/Providers/DataExportChildProvider.cs
Issues:
- Inherits from CatalogueChildProvider (already a god class)
- Duplicate pattern of parent class
4. Other Large Classes
| File | Lines | Issues |
|---|---|---|
| TableRepository.cs | 1,025 | CRUD + caching + transactions + versioning |
| BasicActivateItems.cs | 825 | Dialog + repo + command execution |
| RDMPCollectionCommonFunctionality.cs | 933 | Icons + drag-drop + copy-paste + favorites + filtering |
Recommended Refactoring
For CatalogueChildProvider:
// Extract hierarchy building
public class HierarchyBuilder<T> where T : IMapsDirectlyToDatabaseTable
{
void BuildHierarchy(T root, IHierarchyNode<T> node);
}
// Extract caching
public class EntityCache<T> where T : IMapsDirectlyToDatabaseTable
{
T[] GetAll();
void Invalidate();
}
// Extract descendancy tracking
public class DescendancyTracker
{
void Track(object parent, object child);
IEnumerable<object> GetDescendants(object parent);
}For Catalogue.cs:
// Extract validation
public class CatalogueValidator { }
// Extract metadata
public class CatalogueMetadata { }
// Keep entity slim
public class Catalogue : DatabaseEntity { }Expected Impact
- ~3,000 lines of duplicated code eliminated
- Improved testability (smaller, focused classes)
- Clearer responsibility boundaries
- Easier maintenance and onboarding
Labels
refactoring, technical-debt
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request