PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Java] Datenbank<->GUI Vorgehensweise


Ganon
2007-03-19, 21:08:47
Hallo.

Kann sein das ich jetzt auch großen Blödsinn rede, also schon mal vorab -> Sorry

Naja. Ich möchte mal gerne meine Vorgehensweise erklären, um mal nachzufragen, ob ich gerade großen Mist fabriziere oder ob das schon so in Ordnung geht. Ich habe nämlich so meine Zweifel, da ich in Java eher noch Anfänger bin.

Also die GUI wird ganz normal mit Swing erstellt. Jedes Element (JTextField, JButton, usw.) landet dann in einer HashMap. Dann werden in einer Schleife Standard-Eigenschaften gesetzt wie Listener hinzugefügen, Name setzen usw.

Dann haben JTextFields ja ein Document als Model. Dort kann ich ja Properties definieren, mit putProperty. Dort schreibe ich dann rein, welche Tabelle und welches Feld. Also z.B.

jTextField1.getDocument().putProperty("table","adressen");
jTextField1.getDocument().putProperty("tableField","tstrasse");

So. Die Tabellen-Daten lese ich mir dann in ein Model ein. Hier jetzt z.B. mit

SELECT * FROM adressen

lade ich mir die Daten in einen 2D Vector. Die Überschriften auch. Entsprechende Getter/Setter sind vorhanden um an die Daten ran zu kommen und um sie auch wieder schreiben zu können.

Die beiden Sachen habe ich dann mit einer Controller-Klasse verbunden, welche über das Observer-Pattern Änderungen mitbekommt. Das GUI aktualisiert dann alle Text-Felder über die Update-Routine. Ich laufe dann ganz normal durch die Hashmap und setze mit setText die neuen Werte. Ich übergebe dazu dem Controller die Referenz zum Textfeld, welcher dann die Propertys ausliest und die entsprechenden Daten aus dem Model holt. Genauso läuft es denn mit Aktualisierungen. Es wird einfach das Textfeld übergeben und dann macht das ganze Zeug dahinter den Rest anhand der Informationen aus dem Document.

Das Ganze habe ich jetzt über General-Methoden/Klassen gemacht, so das für jedes Textfeld das gleiche Handling ist und ich so nicht jedes Textfeld einzeln behandeln muss (viele viele Textfelder ). Wenn ich jetzt aber ein Textfeld gesondert behandeln muss, rufe ich über dynamische Methoden-Aufrufe die Funktion (werden immer aufgerufen, wenn nicht vorhanden, passiert nix):

<Objektname>_<Ereignis>() auf.

Also wenn ich z.B. einen valueChange mitbekommen würde, dann rufe ich aus der Methoden-Klasse:

txtStrasse_valueChange()

auf. Ein valueChange wäre ja eine Änderungen im Document, welche eine folgende FocusLost zur folge hat. So wird sie nicht bei jedem Tastendruck aufgerufen. Genauso mache ich das auch mit Schalten, etc.

Bisher klappt das auch alles momentan bestens. Momentan überlege ich wie ich das Ganze noch auf Tabellen ausweiten kann und wie ich es ggf. noch erweitern/vereinfachen kann.

Nunja. Nun ist meine Frage, ob Java hier nicht ggf. schon Sachen bietet um mir das Ganze zu vereinfachen, oder ob ich hier mit offenen Armen gegen eine Wand renne. Klar. Momentan klappt alles, aber wenn ich mit 200 km/h auf eine Wand zufahre, klappt auch alles, bis ich bei der Wand bin.

Ich hoffe ihr konntet mir folgen und ich würde mich über Kommentare freuen

Schönen Abend noch.

ethrandil
2007-03-20, 18:12:54
Was genau möchtest du denn implementieren? Ein Interface für SQL-Datenbanken allgemein, oder ein Interface für eine bekannte Datenbank mit bekannten Tabellen?

mfg
- eth

Ganon
2007-03-20, 22:34:03
Das Zweite. Ein Interface für bekannte Datenbank/Tabellen.

Shink
2007-03-23, 07:19:52
Ich finde die Idee ja schon mal ganz kreativ. Das Problem, das ich dabei sehe ist, dass du mögliche Änderungen (oder Spezifikationsfehler) der Datenbanktabellen oder möglicherweise auch der Datenbank viel zu spät bemerkst. Sollte es solche Änderungen geben, ist ein Refactoring selbst bei Vorhandensein von automatischen Tests sicher kein Kinderspiel.
Normalerweise verwendet man (nicht nur) deshalb ein ORM (z.B. SimpleORM oder Hibernate), was sicher keine verkehrte Idee wäre.

Die andere Frage ist, wie gut du das Design auf Wiederverwendbarkeit trimmen kannst.

Ganon
2007-03-23, 11:20:22
Hmm... Hibernate kenn ich noch nicht. Scheint ja ein ziemlich dickes Schwein zu sein :D Muss ich mir mal angucken.

Das was ich bisher gemacht habe, habe ich so parallel zum Lernen von Java gemacht. Ich mach mir ja momentan selbst gedanken ob das überhaupt alles so geht. Aber jetzt guck ich mir erst mal Hibernate an.

Danke.

Shink
2007-03-24, 07:46:55
Hmm... Hibernate kenn ich noch nicht. Scheint ja ein ziemlich dickes Schwein zu sein :D Muss ich mir mal angucken.

Ja; wir haben bisher eigentlich immer mit SimpleORM das Auslangen gefunden, aber Hibernate ist natürlich bekannter und umfangreicher.