Ich habe eine Anwendung geerbt, die einige Refactoring benötigt. Das Folgende bereitet mir Kopfschmerzen. Die Original-Quellcode hat zu viele Schalter Fälle wie folgt aus:Refactoring-Code mit zu vielen Switch-Fällen
class Girl {
//...
void traditionalMakeUp() {
switch (type) {
case FRENCH:
frenchMakeUp();
break;
case AFRICAN:
africanMakeUp;
break;
case NORWEGIAN:
norwegianMakeUp();
.....
case KOREAN:
koreanMakeUp();
.....
}
}
}
Ich versuche es so Refactoring:
abstract class Girl {
//...
abstract void makeUp();
}
class French extends Girl {
void makeUp() {
// makeUP
}
}
class African extends Girl {
void makeUp() {
// makeUP
}
}
class Norwegian extends Girl {
void makeUp() {
// makeUP
}
}
// Somewhere in client code
girl.makeUp();
Ist es der richtige Weg, es zu tun? Wenn ich nicht mehr als 20 Fälle in meinem Switch hätte, wäre das Strategie-Muster in Ordnung.
Darüber hinaus bin ich nur ungern 20+ Klassen hinzuzufügen, nur um das Strategie-Design-Muster zu passen. Gibt es einen anderen guten Weg, um es zu refaktorisieren?
Was macht jede Variante 'makeUp()'? – Naros
@Naros makeUp() variiert je nach Nationalität. makeUp() Logik in Norwegisch unterscheidet sich vollständig von makeUp() Logik in Französisch, etc ... –
sind die Anzahl der Fälle in Switch mehr oder weniger fest oder eine Möglichkeit zu wachsen? Was ist die durchschnittliche Codezeile der 'makeUp()' Methode? Ist die Methode 'makeUp()' auch von anderen Klassen abhängig oder handelt es sich um einen völlig unabhängigen Code? –