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
AddChildren methods)
- 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+
AddChildren overloads)
- 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
Summary
Several classes have grown too large and violate Single Responsibility Principle. The largest offender is
CatalogueChildProviderat 1,958 lines with 40+AddChildrenmethod overloads.Critical God Classes
1. CatalogueChildProvider.cs - 1,958 lines
File:
Rdmp.Core/Providers/CatalogueChildProvider.csIssues:
AddChildrenmethods)Current Responsibilities (should be separate):
AllLoadMetadatas,AllCatalogues,AllProcessTasks, etc.)AddChildrenoverloads)_childDictionary,_descendancyDictionary)2. Catalogue.cs - 1,591 lines
File:
Rdmp.Core/Curation/Data/Catalogue.csIssues:
3. DataExportChildProvider.cs - 928 lines
File:
Rdmp.Core/Providers/DataExportChildProvider.csIssues:
4. Other Large Classes
Recommended Refactoring
For CatalogueChildProvider:
For Catalogue.cs:
Expected Impact
Labels
refactoring, technical-debt