Hallo zusammen,
ich würde in einer Legacy-Anwendung gerne einen meiner Meinung nach sehr unschönen Teil refactoren, stehe aber irgendwie ein bißchen auf'm Schlauch...
Wir haben folgende Vererbungshierarchie:
- Wertgegenstand (Oberklasse)
- Schiff, Festfeld (Unterklassen, die beide jeweils von Wertgegenstand erben)
In der Anwendung gibt es eine Methode
[HIGHLIGHT="Java"]kopiere(Wertgegenstand quelle, Wertgegenstand ziel)[/HIGHLIGHT]
in der einige Attribute kopiert werden (es geht nichts über gutes Naming ;-)).
Am Ende der Methode kommt dann der unschöne Abschnitt
[HIGHLIGHT="Java"]if (quelle instanceof Schiff && ziel instanceof Schiff)
{
// casten auf Schiff und kopieren der Schiffsattribute
}
else if (quelle instanceof Festgeld && ziel instanceof Festgeld )
{
// casten auf Festgeld und kopieren der Festgeldattribute
}[/HIGHLIGHT]
Diesen Abschnitt würde ich gerne ersetzen.
Meine Idee geht in die Richtung für jede Unterklasse eine Art KopierAssistenten-Klasse zu haben, also eine Klasse mit jeweils einer der folgenden Methoden:
kopiere(Schiff quelle, Schiff ziel)
kopiere(Festgeld quelle, Festgeld ziel)
Mein Problem ist nun, wie ich ohne eine weitere Prüfung mittels instanceof in der oben beschriebenen Methode die korrekte KopierAssistenten-Klasse aufrufe.
Falls einem von Euch ne andere, bessere Idee einfällt, darf es diese selbstverständlich auch gerne vorstellen ;-) Es sollte aber eine Lösung mit dem Fokus auf der oben beschriebenen Methode mit den instanceof-Prüfungen sein, da ich keine größere Änderung am Design der betroffenen Klasse vornehmen kann/darf/will...
Vielen Dank für eure Hilfe!!
ich würde in einer Legacy-Anwendung gerne einen meiner Meinung nach sehr unschönen Teil refactoren, stehe aber irgendwie ein bißchen auf'm Schlauch...
Wir haben folgende Vererbungshierarchie:
- Wertgegenstand (Oberklasse)
- Schiff, Festfeld (Unterklassen, die beide jeweils von Wertgegenstand erben)
In der Anwendung gibt es eine Methode
[HIGHLIGHT="Java"]kopiere(Wertgegenstand quelle, Wertgegenstand ziel)[/HIGHLIGHT]
in der einige Attribute kopiert werden (es geht nichts über gutes Naming ;-)).
Am Ende der Methode kommt dann der unschöne Abschnitt
[HIGHLIGHT="Java"]if (quelle instanceof Schiff && ziel instanceof Schiff)
{
// casten auf Schiff und kopieren der Schiffsattribute
}
else if (quelle instanceof Festgeld && ziel instanceof Festgeld )
{
// casten auf Festgeld und kopieren der Festgeldattribute
}[/HIGHLIGHT]
Diesen Abschnitt würde ich gerne ersetzen.
Meine Idee geht in die Richtung für jede Unterklasse eine Art KopierAssistenten-Klasse zu haben, also eine Klasse mit jeweils einer der folgenden Methoden:
kopiere(Schiff quelle, Schiff ziel)
kopiere(Festgeld quelle, Festgeld ziel)
Mein Problem ist nun, wie ich ohne eine weitere Prüfung mittels instanceof in der oben beschriebenen Methode die korrekte KopierAssistenten-Klasse aufrufe.
Falls einem von Euch ne andere, bessere Idee einfällt, darf es diese selbstverständlich auch gerne vorstellen ;-) Es sollte aber eine Lösung mit dem Fokus auf der oben beschriebenen Methode mit den instanceof-Prüfungen sein, da ich keine größere Änderung am Design der betroffenen Klasse vornehmen kann/darf/will...
Vielen Dank für eure Hilfe!!
Zuletzt bearbeitet von einem Moderator: