25 Jahre Erfahrung FreeCall 0800 tutegos
Eine Methode wird von einer anderen Klasse mehr verwendet als von der definierenden Klasse.
Erzeuge eine Methode mit ähnlichem Rumpf in der Klasse, die die Eigenschaft am meisten nutzt. Delegiere in der alten Methode an die neue Implementierung oder lösche sie.
Für mehr Hinweise siehe Seite 142 in Refactoring
Marian Vittek gibt ein Beispiel für das Verschieben einer Methode; im Argument wird der alte Typ übergeben.
class Project {
Person[] participants;
}
class Person {
int id;
boolean participate(Project p) {
for (int i = 0; i < p.participants.length; i++) {
if (p.participants[i].id == id) return (true);
}
return (false);
}
}
if (x.participate(p))...
Nach der Verschiebung folgt:
class Project {
Person[] participants;
boolean participate(Person x) {
for (int i = 0; i < participants.length; i++) {
if (participants[i].id == x.id) return (true);
}
return (false);
}
}
class Person {
int id;
}
if (x.participate(p))...
Eine andere Klasse nutzt ein Attribut mehr als die eigene Klasse, die das Attribut definiert.
Erzeuge ein neues Attribut in der Ziel-Klasse und ändere die Nutzer.
Für weitere Informationen siehe Seite 146 in Refactoring.
Eine Klasse macht Arbeit, die zwei Klassen tun sollten.
Erzeuge eine neue Klasse. Bewege die relevanten Attribute und Methoden von der alten Klasse in die neue.
Für mehr Informationen siehe Seite 149 von Refactoring.
Eine Klasse macht nicht viel.
Verschiebe alle Eigenschaften in eine andere Klasse und lösche sie.
Für mehr Informationen siehe Seite 154 von Refactoring.
Der Client ruft die Delegator-Klasse eines Objekts auf.
Schreibe Methoden auf dem Server, um den Delegator zu verstecken
Mehr Informationen auf Seite 157 in Refactoring.
Eine Klasse macht zu viele einfache Delegationen.
Der Klient soll selbst die Methoden des Delegates aufrufen.
Für weitere Informationen siehe Seite 160 in Refactoring.
Eine nicht änderbare Klasse benötigt eine zusätzliche Methode.
Erzeuge die Methode beim Klienten mit einem Verweis auf die Klasse als erstes Argument.
Date newStart = new Date( previousEnd.getYear(), previousEnd.getMonth(), previousEnd.getDate() + 1 );
private static Date nextDay(Date arg) {
return new Date (arg.getYear(),arg.getMonth(), arg.getDate() + 1);
}
Date newStart = nextDay(previousEnd);
Mehr Informationen unter Seite 162 bei Refactoring.
Eine verwendete Serverklasse benötigt mehrere zusätzliche Methoden, aber die Klasse kann nicht modifiziert werden.
Erstelle eine neue Klasse, welche die benötigten zusätzlichen Methoden besitzt. Mache die neu geschriebene Klasse (Erweiterung) zu einer Unterklasse oder einem Wrapper von dem Original.
Mehr Informationen auf Seite 164 in Refactoring.