Praktische Refactoring-Tipps
Systematischer Refactoring-Ansatz
LabEx empfiehlt eine strukturierte Methode, um komplexe, geschachtelte Bedingungen in sauberen, wartbaren Code umzuwandeln.
1. Komplexitätsindikatoren identifizieren
graph TD
A[Komplexe Bedingung] --> B{Tiefe > 2 Ebenen?}
B -->|Ja| C[Refactoring erforderlich]
B -->|Nein| D[Lesbarkeit bewerten]
C --> E[Vereinfachungsmethoden anwenden]
Early-Exit-Strategie
// Vor dem Refactoring
int processOrder(Order order) {
if (order.isValid()) {
if (order.hasInventory()) {
if (order.isPaymentConfirmed()) {
return processValidOrder(order);
} else {
return ERROR_PAYMENT_FAILED;
}
} else {
return ERROR_NO_INVENTORY;
}
} else {
return ERROR_INVALID_ORDER;
}
}
// Nach dem Refactoring
int processOrder(Order order) {
if (!order.isValid()) return ERROR_INVALID_ORDER;
if (!order.hasInventory()) return ERROR_NO_INVENTORY;
if (!order.isPaymentConfirmed()) return ERROR_PAYMENT_FAILED;
return processValidOrder(order);
}
3. Komplexitätsmetriken
Metrik |
Guter Standard |
Warnstufe |
Verschachtelungstiefe |
≤ 2 |
> 3 |
Cyclomatische Komplexität |
< 10 |
> 15 |
Bedingungsanzahl |
≤ 3 |
> 5 |
4. Polymorphes Refactoring
class OrderProcessor {
public:
virtual bool validate() = 0;
virtual int process() = 0;
};
class StandardOrderProcessor : public OrderProcessor {
bool validate() override {
// Vereinfachte Validierungslogik
}
int process() override {
// Optimierte Verarbeitung
}
};
5. Prinzipien der funktionalen Zerlegung
- Extrahieren Sie komplexe Bedingungen in benannte Funktionen.
- Verwenden Sie reine Funktionen mit klaren Verantwortlichkeiten.
- Minimieren Sie Seiteneffekte.
- Bevorzugen Sie die Komposition gegenüber verschachtelter Logik.
Erweiterte Refactoring-Strategien
Implementierung des State-Musters
class OrderState {
public:
virtual bool canProcess() = 0;
virtual int processOrder() = 0;
};
class ValidOrderState : public OrderState {
bool canProcess() override {
// Spezielle Zustandsvalidierung
}
};
Refactoring-Checkliste
graph LR
A[Refactoring] --> B{Performance-Auswirkungen}
B -->|Minimal| C[Fortfahren]
B -->|Signifikant| D[Benchmark]
D --> E[Notwendig optimieren]
Bei LabEx glauben wir, dass sauberer Code nicht nur ästhetisch ist, sondern robuste, wartbare Softwarelösungen schafft, die dem Test der Zeit standhalten.