Hallo,
ich habe eine Klasse Produkt, die mit der Zeit gewachsen ist und einige Methode haben etliche if Anweisungen, die nach Produtktyp unterscheiden. Also habe ich angefangen, alles was allgemein gültig ist, in eine Basisklasse Produkt zu schreiben und Subklassen zu bilden (ca. 30 Stück). Jetzt stellt sich folgende Frage bei der Methode setRabatt: Macht hier Vererbung wirklich Sinn.
Die Höhe des Rabatts hängt nicht nur vom Produkt ab, sondern auch vom angemeldeten Benutzer. So würde sich also die Abfrage auf den Benutzer in den Subklassen immer wiederholen. Gibt es einen eleganteren Weg, das zu lösen, oder sollte ich diese Methode lieber in der Klasse Produkt so stehen lassen und nur da Vererbung nutzen, wo die Funktionalität nur vom Produkttyp abhängt?
Frank
ich habe eine Klasse Produkt, die mit der Zeit gewachsen ist und einige Methode haben etliche if Anweisungen, die nach Produtktyp unterscheiden. Also habe ich angefangen, alles was allgemein gültig ist, in eine Basisklasse Produkt zu schreiben und Subklassen zu bilden (ca. 30 Stück). Jetzt stellt sich folgende Frage bei der Methode setRabatt: Macht hier Vererbung wirklich Sinn.
Die Höhe des Rabatts hängt nicht nur vom Produkt ab, sondern auch vom angemeldeten Benutzer. So würde sich also die Abfrage auf den Benutzer in den Subklassen immer wiederholen. Gibt es einen eleganteren Weg, das zu lösen, oder sollte ich diese Methode lieber in der Klasse Produkt so stehen lassen und nur da Vererbung nutzen, wo die Funktionalität nur vom Produkttyp abhängt?
Frank
Java:
// Ohne Vererbung
class Produkt {
void setRabatt() {
if (this.getAngebot().getUser().isAdmin() {
// Erlaube bis 100% Rabatt
}
else {
if (this.getProduktbereich == B1) {
// Erlaube bis 20% Rabatt
}
else if (this.getProduktbereich == B2) {
// Erlaube bis 30% Rabatt
}
else {
// Erlaube bis 10% Rabatt
}
}
)
}
// Mit Vererbung
class Produkt {
void setRabatt() {
if (this.getAngebot().getUser().isAdmin() {
// Erlaube bis 100% Rabatt
}
else {
// Erlaube bis 10% Rabatt
}
)
)
class Produkt_B1 extends Produkt {
void setRabatt() {
if (this.getAngebot().getUser().isAdmin() {
// Erlaube bis 100% Rabatt
}
else {
// Erlaube bis 20% Rabatt
}
)
}
class Produkt_B2 extends Produkt {
void setRabatt() {
if (this.getAngebot().getUser().isAdmin() {
// Erlaube bis 100% Rabatt
}
else {
// Erlaube bis 30% Rabatt
}
)
}