| Single Responsibility |
Separate classes for attributes, code generation, orchestration |
Zero duplicate generation, clear concerns |
| Open/Closed |
Interface-based design (IAttributeGenerator, ICodeGenerator, IOrchestrator) |
Easy to add new generators without modifying existing code |
| Liskov Substitution |
All generators implement common interfaces |
Interchangeable components, consistent behavior |
| Interface Segregation |
Focused interfaces for specific responsibilities |
Minimal contracts, easier testing |
| Dependency Inversion |
Constructor injection with abstractions |
Testable, maintainable, loosely coupled |