4.1 KiB
Middlelayer Verbesserungsvorschläge
🔴 Kritisch / Wichtig
1. Redundante mapLayout Methode entfernen
Problem: mapLayout gibt nur den Parameter zurück - komplett redundant
Lösung: Direkt layout verwenden statt this.mapLayout(layout)
Datei: mappers/pageMapper.ts:32-36
2. console.error durch logger ersetzen
Problem: Inkonsistente Logging - manche Stellen nutzen console.error statt logger
Lösung: Alle console.error/warn durch logger.error/warn ersetzen
Dateien:
resolvers.ts:16,19adapters/config.ts:18plugins/queryComplexity.ts:56
3. Error Handling in Resolvers vereinfachen
Problem: Wiederholende try-catch Blöcke in jedem Resolver Lösung: Wrapper-Funktion für Resolver erstellen
🟡 Wichtig / Code-Qualität
4. PageMapper: Strategy Pattern statt if-Statements
Problem: 8 if-Statements in mapContentItem - schwer wartbar
Lösung: Map-basiertes Strategy Pattern
private static contentMappers = new Map<ContentType, (entry: ContentEntry) => ContentItem>([
[ContentType.html, this.mapHtml],
[ContentType.markdown, this.mapMarkdown],
// ...
]);
5. DataService: Code-Duplikation reduzieren
Problem: Wiederholende Cache + Metrics Logik
Lösung: Helper-Methode withCacheAndMetrics erstellen
6. Cache Keys zentralisieren
Problem: Cache Keys werden überall manuell erstellt
Lösung: CacheKeyBuilder Utility-Klasse
class CacheKeyBuilder {
static page(slug: string, locale?: string) {
return `page:${slug}:${locale || "default"}`;
}
// ...
}
7. Type Safety verbessern
Problem: Einige any Types (z.B. page Loader)
Lösung: ✅ Bereits behoben in dataloaders.ts
🟢 Nice-to-Have / Refactoring
8. __cms Verzeichnis dokumentieren/archivieren
Problem: Alte Contentful-Typen mit Contentful_ Präfix - werden nicht mehr verwendet
Lösung:
- README.md hinzufügen: "Legacy - nicht mehr verwendet"
- Oder in
_legacy/verschieben
9. Resolver Wrapper für Error Handling
Lösung:
function withErrorHandling<T>(
resolver: () => Promise<T>
): Promise<T> {
try {
return await resolver();
} catch (error) {
handleError(error);
}
}
10. DataService: Metrics-Tracking vereinheitlichen
Problem: Nur getPage und getProducts haben Metrics, andere nicht
Lösung: Alle Methoden mit Metrics versehen oder Helper-Methode
11. ContentEntry Union Type verbessern
Problem: Type Guards könnten besser sein Lösung: Type Guard Functions für jeden Content-Type
12. Dokumentation erweitern
- JSDoc Kommentare für alle öffentlichen Methoden
- Beispiele für Adapter-Implementierung
- Performance-Best-Practices
📊 Priorisierung
- Sofort: #1, #2 (Redundanz entfernen, Logging konsistent) ✅
- Bald: #3, #4 (Code-Qualität verbessern) ✅
- Später: #5, #6, #7 (Refactoring für Wartbarkeit) ✅
- Optional: #8-12 (Nice-to-Have)
✅ Umgesetzte Verbesserungen
✅ 1. Redundante mapLayout Methode entfernt
- Entfernt und direkt
layoutverwendet
✅ 2. console.error durch logger ersetzt
- Alle
console.errordurchlogger.errorersetzt
✅ 3. Error Handling in Resolvers vereinfacht
withErrorHandlingWrapper erstellt- Alle Query- und Mutation-Resolvers verwenden den Wrapper
✅ 4. PageMapper: Strategy Pattern
- Map-basiertes Strategy Pattern implementiert
- 8 if-Statements durch wartbare Map ersetzt
✅ 5. DataService: Code-Duplikation reduziert
DataServiceHelpersKlasse erstelltwithCacheAndMetricsundwithCacheMethoden- Alle DataService-Methoden vereinfacht
✅ 6. Cache Keys zentralisiert
CacheKeyBuilderUtility-Klasse erstellt- Alle Cache-Keys an einem Ort
✅ 7. Type Safety verbessert
ContentItem.__resolveTypeverwendet jetztContentItemstattany- Map-basiertes Type-Resolution statt if-Statements
✅ 8. Mutation Resolver vereinfacht
registerundloginverwenden jetzt auchwithErrorHandling- Konsistentes Error Handling überall