134 lines
4.1 KiB
Markdown
134 lines
4.1 KiB
Markdown
# 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,19`
|
|
- `adapters/config.ts:18`
|
|
- `plugins/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
|
|
|
|
```typescript
|
|
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
|
|
|
|
```typescript
|
|
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:**
|
|
```typescript
|
|
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
|
|
|
|
1. **Sofort:** #1, #2 (Redundanz entfernen, Logging konsistent) ✅
|
|
2. **Bald:** #3, #4 (Code-Qualität verbessern) ✅
|
|
3. **Später:** #5, #6, #7 (Refactoring für Wartbarkeit) ✅
|
|
4. **Optional:** #8-12 (Nice-to-Have)
|
|
|
|
## ✅ Umgesetzte Verbesserungen
|
|
|
|
### ✅ 1. Redundante `mapLayout` Methode entfernt
|
|
- Entfernt und direkt `layout` verwendet
|
|
|
|
### ✅ 2. console.error durch logger ersetzt
|
|
- Alle `console.error` durch `logger.error` ersetzt
|
|
|
|
### ✅ 3. Error Handling in Resolvers vereinfacht
|
|
- `withErrorHandling` Wrapper 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
|
|
- `DataServiceHelpers` Klasse erstellt
|
|
- `withCacheAndMetrics` und `withCache` Methoden
|
|
- Alle DataService-Methoden vereinfacht
|
|
|
|
### ✅ 6. Cache Keys zentralisiert
|
|
- `CacheKeyBuilder` Utility-Klasse erstellt
|
|
- Alle Cache-Keys an einem Ort
|
|
|
|
### ✅ 7. Type Safety verbessert
|
|
- `ContentItem.__resolveType` verwendet jetzt `ContentItem` statt `any`
|
|
- Map-basiertes Type-Resolution statt if-Statements
|
|
|
|
### ✅ 8. Mutation Resolver vereinfacht
|
|
- `register` und `login` verwenden jetzt auch `withErrorHandling`
|
|
- Konsistentes Error Handling überall
|
|
|