Klassenübergreifende Eigenschaften - wie?
flowh
- java
Hallo miteinander!
Ich habe ein allgemeines Problem beim Design meines Java-Programms:
Eine Klasse ist für die Datenbankanbindung verantwortlich, eine andere "scannt" Verzeichnisse und eine dritte ist fürs GUI da.
Wie stelle ich es nun am geschicktesten an, Eigenschaften, die in mehreren Klassen abrufbar und veränderbar sein müssen (z.B. der String basePath in der Scan-Klasse und in der GUI-Klasse, da er dort verändert werden kann), klassenübergreifend zu verwenden?
Würde ich normale Getter-/Setter-Methoden verwenden, müsste ich ja ständig eine Instanz zur Verfügung haben; aber es macht m.E. keinen Sinn, in der GUI-Klasse eine Instanz der DB-Klasse zu haben, oder?
Ich hoffe, irgendwer hat eine Lösung für mein Problem!
Servus
Hallo flowh,
Wie stelle ich es nun am geschicktesten an, Eigenschaften, die in mehreren Klassen abrufbar und veränderbar sein müssen (z.B. der String basePath in der Scan-Klasse und in der GUI-Klasse, da er dort verändert werden kann), klassenübergreifend zu verwenden?
Da kann man sich jetzt unterschiedlich komplexe Entwürfe vorstellen, jenachdem wie Umfangreich die Software ist und welche Flexibilität man erreichen will.
basePath scheint erstmal eine Eigenschaft von Scan-Objekten zu sein, also gehört sie auch dort hin.
Wenn die GUI-Klasse die Benutzerschnittstelle für ein Scan-Objekt bereit stellt, dann ist es auch OK, dass GUI-Objekte immer eine Referenz auf ein zugehöriges Scan-Objekt haben.
Nun soll die Eigenschaft wohl aus der Datenbank geladen und dort hin gespeichert werden. Ein Datenbank-Objekt muss also wissen, wie es Scan-Objekte zu speichern hat. In der einfachsten Variante sieht man dafür einfach eine Methode im Datenbank-Objekt vor. Alternativ kann man eine weitere Klasse vorsehen, die die Logik kapselt, wie das Objekt in der Datenbank zu speichern ist. Soetwas zu modelieren ist immer etwas knifflig, weil die Abbildung von Objekt auf Datenbank sowohl interne Information über das Objekt als auch über die Datenbank benötigt. Das ist vermutlich auch einer der Ggründe, warum es beliebig viele Frameworks dafür gibt...
Zum letzten Teil der Frage: Soll ein GUI-Objekt eine Referenz auf ein Datenbank-Objekt haben? Wenn im System mehrere Datenbank-Objekte verwendet werden, dann ja. Das GUI-Objekt muss Datenbank-Objekt und Scan-Objekt zusammenbringen, also muss es das Datenbank-Objekt kennen.
Eine Datenbankverbindung ist allerdings oft etwas, das nur einmal und global benötigt wird. Dafür bietet sich ein Singelton an über den andere Objekte das Datenbank-Objekt beziehen können:
public class Datenbank {
private static instance;
private Datenbank() {
}
public Datenbank getInstance() {
if (instance == null) {
instance = new Datenbank();
}
return instance;
}
}
Grüße
Daniel