src/Tools/CLI/Scaffolding/REFACTORING.md
This document outlines the refactoring of the TemplateEngine.cs god class into focused, single-responsibility components.
The original TemplateEngine.cs was a 1645-line god class that handled everything from template loading to rendering and validation. This refactoring splits it into focused services while maintaining backward compatibility.
Responsibility: Load templates from embedded resources and static sources
GetFrameworkVersion() - Gets the current framework versionGetStaticTemplate(name) - Gets static template content by nameTemplateExists(name) - Checks if a template existsResponsibility: Parse template syntax and normalize project names
ExtractVariables(template) - Extracts interpolation variablesIsValidTemplate(template) - Validates template syntaxNormalizeProjectName(name, context) - Normalizes names for different contexts (Docker, database, etc.)Responsibility: Render templates with variable substitution
Render*() methods that generate specific templatesResponsibility: Validate template structure and project configuration
ValidateProjectOptions() - Validates input parametersValidateTemplateAvailability() - Ensures required templates existValidateGeneratedContent() - Validates output qualityValidateProjectStructure() - Checks for logical issuesResponsibility: Cache frequently used templates
Responsibility: Dependency injection container
The refactored TemplateEngine class maintains the exact same public API as before. All existing code calling TemplateEngine.GenerateXxx() methods will continue to work without changes.
TemplateEngine.cs - Refactored to delegate to services (maintains API)ITemplateLoader.cs + TemplateLoader.cs - Template loadingITemplateParser.cs + TemplateParser.cs - Template parsingITemplateRenderer.cs + TemplateRenderer.cs - Template renderingITemplateValidator.cs + TemplateValidator.cs - Validation logicITemplateCache.cs + TemplateCache.cs - Caching layerTemplateServices.cs - DI containerTemplateEngineTests.cs - Basic validation testsFSH.CLI.csproj - Added Microsoft.Extensions.DependencyInjectionRun TemplateEngineTests.RunValidationTests() to verify the refactoring works correctly.
TemplateEngine.cs is backed up as TemplateEngine.cs.backup