name: refactoring-planner description: >- Strukturierte Refactoring-Planung mit Impact-Analyse und schrittweiser Umsetzung für große Codebases. Use when asked to "plan refactoring", "refactor module", "restructure code", "Refactoring planen", "Code umstrukturieren", "Migration planen", "technische Schulden abbauen", or when preparing a large code change that affects multiple files. Generates prioritized, test-secured refactoring plans with rollback strategies.
Refactoring Planner Skill
Erstelle strukturierte, sichere Refactoring-Pläne für große Codebases. Jeder Plan folgt dem Prinzip: Absichern → Analysieren → Planen → Umsetzen → Verifizieren.
Refactoring-Workflow
Schritt 1: Scope definieren
Bevor du planst, kläre den Scope:
Was genau soll refactored werden?
├── Einzelne Datei/Klasse → Micro-Refactoring
├── Ein Modul/Feature → Modul-Refactoring
├── Architektur-Schicht → Layer-Refactoring
├── Querschnittsthema → Cross-Cutting Refactoring
└── Gesamtarchitektur → Strategisches Refactoring
Frage den Entwickler:
- Was ist das Ziel? (Lesbarkeit, Performance, Erweiterbarkeit, Testbarkeit?)
- Warum jetzt? (Blockiert Feature-Entwicklung? Bugs? Onboarding?)
- Zeitbudget? (1 Tag, 1 Woche, 1 Sprint?)
- Risikotoleranz? (Kann die App kurz instabil sein oder muss alles rückwärtskompatibel bleiben?)
Schritt 2: Ist-Zustand dokumentieren
Erstelle eine präzise Beschreibung des aktuellen Zustands:
## Ist-Zustand: [Modul/Feature-Name]
### Betroffene Dateien
- `src/services/UserService.ts` (342 LoC) — Hauptproblem: God Class
- `src/controllers/UserController.ts` (128 LoC) — zu viel Logik im Controller
- `src/models/User.ts` (89 LoC) — Mixed Concerns
### Aktuelle Probleme
1. [Problem] — [Auswirkung] — [Schweregrad]
2. ...
### Aktuelle Abhängigkeiten
- Wird importiert von: [Liste]
- Importiert selbst: [Liste]
- Externe APIs: [Liste]
### Bestehende Tests
- Unit Tests: [Anzahl] — Coverage: [%]
- Integration Tests: [Anzahl]
- E2E Tests: [Anzahl]
Schritt 3: Soll-Zustand definieren
## Soll-Zustand
### Zielarchitektur
[Mermaid-Diagramm oder Beschreibung]
### Design-Entscheidungen
1. [Entscheidung] — Begründung: [Warum]
2. ...
### Neue Dateistruktur
src/
├── services/
│ ├── UserService.ts → UserAuthService.ts + UserProfileService.ts
│ └── UserValidation.ts → NEU
├── repositories/
│ └── UserRepository.ts → NEU (aus Service extrahiert)
└── types/
└── user.types.ts → NEU (Shared Types)
Schritt 4: Impact-Analyse
KRITISCH: Vor jedem Refactoring die Auswirkungen analysieren:
## Impact-Analyse
### Direkt betroffene Dateien
| Datei | Änderungstyp | Risiko |
|---|---|---|
| `UserService.ts` | Aufteilen | 🔴 Hoch |
| `UserController.ts` | Interface-Änderung | 🟡 Mittel |
| `user.routes.ts` | Import-Pfade | 🟢 Niedrig |
### Indirekt betroffene Dateien
[Alle Dateien die die betroffenen Module importieren]
### Breaking Changes
- [ ] API-Contracts ändern sich → Clients müssen angepasst werden
- [ ] Datenbank-Schema ändert sich → Migration nötig
- [ ] Konfiguration ändert sich → Deployment-Anpassung nötig
- [ ] Externe Integrationen betroffen
### Risiko-Bewertung
- Gesamtrisiko: [🔴 Hoch / 🟡 Mittel / 🟢 Niedrig]
- Begründung: [...]
- Rollback-Strategie: [...]
Schritt 5: Refactoring-Plan erstellen
Nutze das Template in ./templates/refactoring-plan.md.
Der Plan MUSS diese Eigenschaften haben:
- Atomare Schritte — Jeder Schritt ist einzeln committbar und deploybar
- Tests zuerst — Vor jeder Änderung Regression-Tests erstellen
- Rückwärtskompatibel — Alte Interfaces bleiben erhalten bis alle Consumer migriert sind
- Verifizierbar — Nach jedem Schritt: Tests grün? Build erfolgreich? App funktioniert?
Schritt 6: Umsetzungs-Reihenfolge
Folge immer dem Strangler Fig Pattern:
Phase 1: Absichern
├── Fehlende Tests für bestehenden Code schreiben
├── Snapshot-Tests für kritische Outputs erstellen
└── CI/CD Pipeline sicherstellen
Phase 2: Parallel aufbauen
├── Neue Struktur neben der alten erstellen
├── Neue Tests für neue Struktur schreiben
└── Beide Versionen koexistieren lassen
Phase 3: Umleiten
├── Consumer schrittweise auf neue Struktur umleiten
├── Feature-Flags nutzen wenn möglich
└── Nach jeder Umleitung: Regression-Tests
Phase 4: Aufräumen
├── Alte Implementierung entfernen
├── Verwaiste Imports bereinigen
├── Dokumentation aktualisieren
└── Finale Test-Suite validieren
Refactoring-Patterns (Referenz)
Micro-Refactorings (einzelne Datei, < 1h)
| Pattern | Wann | Vorgehen |
|---|---|---|
| Extract Method | Funktion > 30 Zeilen | Logische Blöcke in eigene Funktionen |
| Extract Interface | Klasse hat zu viele Verantwortungen | Interface definieren, Implementierung separieren |
| Replace Conditional with Polymorphism | Lange if/switch-Ketten | Strategy Pattern einführen |
| Introduce Parameter Object | Funktion hat > 4 Parameter | DTO/Config-Objekt erstellen |
| Remove Dead Code | Ungenutzte Exports/Funktionen | ts-prune nutzen, dann entfernen |
Modul-Refactorings (mehrere Dateien, 1-5 Tage)
| Pattern | Wann | Vorgehen |
|---|---|---|
| Split God Class | Klasse > 500 LoC, multiple Concerns | Nach Verantwortung aufteilen (SRP) |
| Extract Service | Controller enthält Geschäftslogik | Service Layer einführen |
| Introduce Repository | Datenbankzugriffe verstreut | Repository Pattern einführen |
| Event-Driven Decoupling | Tight Coupling zwischen Modulen | Events/Observer einführen |
Architektur-Refactorings (viele Dateien, 1-4 Wochen)
| Pattern | Wann | Vorgehen |
|---|---|---|
| Strangler Fig | Legacy-System schrittweise ersetzen | Neue Implementierung parallel, schrittweise umleiten |
| Branch by Abstraction | Große Dependency ersetzen | Abstraktionsschicht einführen, dann austauschen |
| Feature Flags | Risikoreiche Änderungen | Beide Pfade parallel, per Flag steuerbar |
Wichtige Regeln
- Nie Refactoring und Feature-Entwicklung in einem PR mischen
- Jeden Refactoring-Schritt als eigenen Commit
- Refactoring-PR sollte keine funktionalen Änderungen enthalten
- Immer mit dem niedrigsten Risiko anfangen
- Bei Unsicherheit: Kleinere Schritte wählen
- Keine Optimierungen während des Refactorings — erst strukturieren, dann optimieren