mirror of
https://github.com/samiyev/puaros.git
synced 2025-12-28 15:26:53 +05:00
refactor: extract detector logic into focused strategy classes
Refactored three largest detectors to improve maintainability and reduce complexity: - AggregateBoundaryDetector: 381 → 162 lines (57% reduction) - HardcodeDetector: 459 → 89 lines (81% reduction) - RepositoryPatternDetector: 479 → 106 lines (78% reduction) Added 13 new strategy classes: - FolderRegistry - centralized DDD folder name management - AggregatePathAnalyzer - path parsing and aggregate extraction - ImportValidator - import validation logic - BraceTracker - brace and bracket counting - ConstantsFileChecker - constants file detection - ExportConstantAnalyzer - export const analysis - MagicNumberMatcher - magic number detection - MagicStringMatcher - magic string detection - OrmTypeMatcher - ORM type matching - MethodNameValidator - repository method validation - RepositoryFileAnalyzer - file role detection - RepositoryViolationDetector - violation detection logic All 519 tests passing, zero ESLint errors, no breaking changes.
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
import { DDD_FOLDER_NAMES } from "../constants/detectorPatterns"
|
||||
|
||||
/**
|
||||
* Registry for DDD folder names used in aggregate boundary detection
|
||||
*
|
||||
* Centralizes folder name management for cleaner code organization
|
||||
* and easier maintenance of folder name rules.
|
||||
*/
|
||||
export class FolderRegistry {
|
||||
public readonly entityFolders: Set<string>
|
||||
public readonly valueObjectFolders: Set<string>
|
||||
public readonly allowedFolders: Set<string>
|
||||
public readonly nonAggregateFolders: Set<string>
|
||||
|
||||
constructor() {
|
||||
this.entityFolders = new Set<string>([
|
||||
DDD_FOLDER_NAMES.ENTITIES,
|
||||
DDD_FOLDER_NAMES.AGGREGATES,
|
||||
])
|
||||
|
||||
this.valueObjectFolders = new Set<string>([
|
||||
DDD_FOLDER_NAMES.VALUE_OBJECTS,
|
||||
DDD_FOLDER_NAMES.VO,
|
||||
])
|
||||
|
||||
this.allowedFolders = new Set<string>([
|
||||
DDD_FOLDER_NAMES.VALUE_OBJECTS,
|
||||
DDD_FOLDER_NAMES.VO,
|
||||
DDD_FOLDER_NAMES.EVENTS,
|
||||
DDD_FOLDER_NAMES.DOMAIN_EVENTS,
|
||||
DDD_FOLDER_NAMES.REPOSITORIES,
|
||||
DDD_FOLDER_NAMES.SERVICES,
|
||||
DDD_FOLDER_NAMES.SPECIFICATIONS,
|
||||
DDD_FOLDER_NAMES.ERRORS,
|
||||
DDD_FOLDER_NAMES.EXCEPTIONS,
|
||||
])
|
||||
|
||||
this.nonAggregateFolders = new Set<string>([
|
||||
DDD_FOLDER_NAMES.VALUE_OBJECTS,
|
||||
DDD_FOLDER_NAMES.VO,
|
||||
DDD_FOLDER_NAMES.EVENTS,
|
||||
DDD_FOLDER_NAMES.DOMAIN_EVENTS,
|
||||
DDD_FOLDER_NAMES.REPOSITORIES,
|
||||
DDD_FOLDER_NAMES.SERVICES,
|
||||
DDD_FOLDER_NAMES.SPECIFICATIONS,
|
||||
DDD_FOLDER_NAMES.ENTITIES,
|
||||
DDD_FOLDER_NAMES.CONSTANTS,
|
||||
DDD_FOLDER_NAMES.SHARED,
|
||||
DDD_FOLDER_NAMES.FACTORIES,
|
||||
DDD_FOLDER_NAMES.PORTS,
|
||||
DDD_FOLDER_NAMES.INTERFACES,
|
||||
DDD_FOLDER_NAMES.ERRORS,
|
||||
DDD_FOLDER_NAMES.EXCEPTIONS,
|
||||
])
|
||||
}
|
||||
|
||||
public isEntityFolder(folderName: string): boolean {
|
||||
return this.entityFolders.has(folderName)
|
||||
}
|
||||
|
||||
public isValueObjectFolder(folderName: string): boolean {
|
||||
return this.valueObjectFolders.has(folderName)
|
||||
}
|
||||
|
||||
public isAllowedFolder(folderName: string): boolean {
|
||||
return this.allowedFolders.has(folderName)
|
||||
}
|
||||
|
||||
public isNonAggregateFolder(folderName: string): boolean {
|
||||
return this.nonAggregateFolders.has(folderName)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user