Wie sollte eine Datenbank-zentriert Java Swing-Anwendung gestaltet werden?
-
01-10-2019 - |
Frage
Ich habe eine Zeit lang eine Datenbank-zentriert Java Swing-Anwendung zu schreiben.
Die GUI und DAO-Code endet in einem großen Baum wie:
JFrame
|
JTabbedPane
|
+--------------------+----------------------+-------------+
| | | |
JPanel1 JPanel2 JPanel3 JPanel4
| | | |
JButtons--JTable1 JTextFields--JButton JTable2 JDialog--JTable3
i! i! i! i!
Model1 Model2 Model3 Model4
| | | |
+------------+-----------+---------+-------------------+
|
DataAccessObject
Die Anwendung mehr Ansichten hat, einige eine JTable enthalten Daten für die Ansicht, und einige enthalten einen Dialog mit einer Form zum Bearbeiten oder Hinzufügen von Daten.
habe ich einen DataAccessObject
mit JDBC-Verbindung. Ich benutze mehrere Modelle (erweitert AbstractTableModel
) die Ansichten (Formulare oder Tabellen) mit dem DAO zu verbinden.
In meiner ersten Version implementiert ich die DAO als Singleton, dann habe ich gelernt, dass dies ein anti-Muster und verwenden stattdessen Dependency Injection, so dass ich die DAO im Grunde initialisieren und dann spritzen sie an den Konstruktor aller Modelle. Dann initialisieren ich die JFrame und einen Verweis auf die Modelle im Konstruktor in dem Loch GUI-Baum injizieren.
Vorbei an der Bezugnahme auf die Modelle durch das Loch GUI Baum fühlt sich sehr ungeschickt, aber ich weiß, dass ich eine gute Kontrolle der Abhängigkeiten. Aber gibt es ein besseres entwerfe ich für eine Datenbank-zentriert Java Swing-Anwendungen mit vielen Ansichten von Daten, die ein Modell mit einer Verbindung zur Datenbank benötigen verwenden könnte?
Lösung
Ich würde auch Shakedown Kommentar unterstützen. Es geht um Schichten. Trennen Sie Ihren Code in Schichten / Ebenen.
Da Sie über Dependency Injection sprachen würde ich Ihnen vorschlagen, einen Blick auf Spring Rich Client-Framework nehmen ein Gefühl darüber, wie gut Swing-Anwendungen zu bekommen entworfen / entwickelt werden.