# Entwurfsmuster gesucht



## webbbdesigner (9. Aug 2011)

Folgende Anforderung:

Für einen Fahrzeugverleih werden die Mietpreise der Fahrzeuge abhängig von der Fahrzeugkatergorie, Sasion (Jahreszeit) und der Mietdauer ermitelt. 

Ich habe eine Klasse für die Fahrzeuge. für Fahrzeugkategorein und ein Interface, das das Verhalten "verleihbar" abbildet (insb. die Methode "getMietpreis" vorgibt).

Frage: Wo implemetiere ich nun die Methoden zur Preisermittlung (abh. von den o.a. Kriterien)? Eine eigene Klasse, die das verantwortlich macht? Gibt es für ein solches Problem ein Entwurfsmusster?

Vielen Dank.


----------



## turtle (9. Aug 2011)

Ichh vermute mal schon und bin der Meinung, dass die Methode eine Abfrage an eine Datenbank macht. Daher schlage ich das DAO-Pattern vor.


----------



## oopexpert (28. Aug 2011)

Fahrzeug, FahrzeugKategorie und Saison sind Top-Level-Objekte, die einer verwaltenden Instanz, z.B. einem Objekt FahrzeugVermietungSystem, untergeordnet sind. Damit würde sich für mich die Frage der Position der Methode erübrigen, nämlich in dem FahrzeugVermietungSystem.

Bzgl. Design Pattern: Ja und Nein. Design --> ja, Pattern --> nein. Ich würde proklamieren, mehr auf Objektkomposition und Objektkollaboration zu achten und die natürlichen Objekte zu identifizieren. Ich sehe viele Entwickler, die immer wieder vor so einer Frage stehen. Einige machen sich tatsächlich Arbeit damit, wie Du, die optimale Position ihrer Methoden zu identifizieren und merken, dass irgendetwas nicht ganz sauber ist, weil die Entscheidung so schwer ist. Die anderen haben keine Hemmung und bauen sich Utility-Klassen, die dann Business-Logik beinhalten.

getMietPreis in einem DAO zu implementieren, halte ich für nicht so gut, da dann Business-Logik in den Data-Access-Layer abwandert. Sollten keine performancekritischen Gründe existieren, dann sollte man die Business-Logik auch in den Fachobjekten behalten. Ich würde mir das so vorstellen:


```
FahrzeugVermietungSystem system = FahrzeugVermietungSystem.getInstance();
Fahrzeug f = system.addFahrzeug("Mercedes SLK 220", grundpreis);
Saison winter = system.addSaison("Winter", von, bis);
Saison herbst = system.addSaison("Herbst", von, bis);
system.addMietpreisStaffelung(f, winter, vonAnzahlTage, bisAnzahlTage, preisfaktor);
system.addMietpreisStaffelung(f, herbst, vonAnzahlTage, bisAnzahlTage, preisfaktor);
system.addMietpreisStaffelung(f, herbst, vonAnzahlTage, bisAnzahlTage, preisfaktor);
double mietpreis = system.getMietpreis(f, herbst, von, bis);
```

Wenn Du nicht den Anspruch hast, die Objektkomposition und die Objektkollaboration beachten, dann würde ich die Methode in Fahrzeug ablegen:


```
double mietpreis = f.getMietpreis(herbst, von, bis);
```

Ich kenne Dein Fachklassen-Modell nicht, deshalb weiss ich nicht, ob dieses Beispiel 1:1 projezierbar auf Deine Anwendung ist. Es ist nur ein Vorschlag.


----------

