[Java/OOA] Objekte in Objekten anlegen?

PlaciD

Böhser Onkel
ID: 55555
L
11 Februar 2007
722
105
Hallo,

ich habe mal wieder eine grundsätzliche Frage zur Objektorientierung.

Es geht um folgendes:
In der Applikation gibt es Bücher (Klasse Book) und User (Klasse User). Bücher können von Usern ausgeliehen werden. Dafür habe ich die assoziative Klasse BookLending. Wenn eine neue Buchausleihe angelegt wird, wird dem Konstruktor ein Buch-Objekt sowie ein User-Objekt übergeben, die internen IDs dieser Objekte werden in der Datenbank gespeichert.

Wenn ich nun eine Ausleihe auslesen möchte mittels eines Konstruktors, um z.B. die Ausleihe zu beenden, übergebe ich das Book-Objekt, welches ausgeliehen wurde. Wie referenziere ich nun aber das User-Objekt, welches ja evtl. garnicht existiert (also in der db schon, aber im Programm evtl. noch nicht). Ist es sinnvoll, ein solches User-Objekt, einfach in der Klasse BookLending anzulegen? Und wenn nicht, wie geht man sonst mit sowas um?

Ich hoffe, man versteht, was gemeint ist :-? Wenn nicht, einfach nochmal nachfragen :)

Danke euch allen schonmal im vorraus,
PlaciD
 
also den ersten Teil habe ich verstanden, den 2. nicht :oops:

Warum speicherst du in dem Bücher-Objekt nicht eine Referenz auf den User der es ausleiht? Wenn es niemand ausgeliehen hat löschst du die Referenz.
Zusätzlich führt jeder User eine LinkedList mit Referenzen auf Bücher die er ausgeliehen hat, die bidirektionale Assoziation ist gegeben ;)
 
Hui, endlich mal wieder 3-Tier-Architektur =).

Also wieder muss ich sagen, dass das alles Geschmackssache ist - es gibt ja leider keinen 100%igen Ansatz für diese Art der Architektur. Normalerweise funktioniert es aber so, dass du an jeder Stelle, wo du ein Business Object benötigst, es auch neu anlegst. Das kostet dann selbstverständlich einen Datenbankzugriff, ist aber meiner Meinung nach die sauberste der Methoden.

Du kannst natürlich auch eine Liste der User halten und dir dann eine Referenz aus der Liste ziehen. Normalerweise macht man so was, wenn man große Datenmengen besitzt, diese sich nicht regelmäßig aktualisieren und daher gecached werden sollen. Bei Usern kann ich das aber nicht empfehlen.
 
mit deiner denkweise einer assoziations-"Klasse" verfolgst du die richtung von datenhaltung zum programmcode. das kann zwar gut sein, ist aber dann eher keine echte ooa.

im endeffekt solltest du nicht der oberfläche klassen zur verfügung stellen, mit denen assoziationen generiert werden, sondern wie schon geschrieben wurde methoden die diese aufgabe übernehmen. das sorgt für transparenz und ist für die oberfläche nicht sichtbar, und auch nicht relevant.

der zweite teil deiner frage is wirklich recht unverständlich :)
hier gilt aber auch, übergib entweder dem user-objekt das zu lösende book-objekt oder umgekehrt. du könntest dich natürlich auch auf die reine id-übergabe beschränken.. das fällt dann maximal ins schnittstellen-design.