Grundsätzliche Fragen zum Aufbau eines komplexeren Programmes

DStrohma

Bekanntes Mitglied
Hi Community,

ich arbeite gerade an einem Programm dass in naher Zukunft eine Bücherverwaltung darstellen soll. Damit ihr eine grobe Vorstellung habt wie das aussehen soll: Screenshot
Zu dem Ganzen hab ich ein paar Fragen im Bezug auf MVC und die Datenbankkommunikation aber erst mal möchte ich etwas mehr auf die Funktionsweise eingehen.

Die Daten (also Buchinformationen) sollen in einer H2 Embedded DB gespeichert werden. Das geht auch schon alles wie ihr seht, ich kann die DB auslesen - mehr aber momentan noch nicht. Die Daten sollen also ausgelesen werden und in einer JTable und in dem "Book Details"-Panel dargestellt werden.

Ich finde die Idee ganz nett dass ich dem Model meiner JTable ein ResultSet gebe und dadurch die Buchdaten darstelle. Das habe ich dann auch so ähnlich gemacht - mit Hilfe folgender Klasse:
Java:
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.Vector;

import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

public class DBUtils {
    public static TableModel resultSetToTableModel(ResultSet rs) {
        try {

            ResultSetMetaData metaData = rs.getMetaData();
            int numberOfColumns = metaData.getColumnCount();
            Vector columnNames = new Vector();

            // Get the column names
            for (int column = 0; column < numberOfColumns; column++) {
                columnNames.addElement(metaData.getColumnLabel(column + 1));
            }

            // Get all rows
            Vector rows = new Vector();

            while (rs.next()) {
                Vector newRow = new Vector();

                for (int i = 1; i <= numberOfColumns; i++) {
                    newRow.addElement(rs.getObject(i));
                }

                rows.addElement(newRow);
            }

            return new DefaultTableModel(rows, columnNames);

        } catch (Exception e) {
            e.printStackTrace();

            return null;
        }
    }
}

In dem Panel der JTable rufe ich dann folgendes auf (Wobei mir die getBooks Methode eben ein ResultSet liefert):
Code:
        TableModel model = DBUtils.resultSetToTableModel(DB.getBooks());

        table = new JTable(model);

Jetzt stellt sich mir die Frage wie ich bei einer Änderung der Buchdaten (soll nur in dem Book-Details-Panel gehen, die Tabelle ist nur für die Darstellung) die Änderungen in die DB schreibe und wie ich dann wieder die Tabelle aktualisiere. Versteht mich bitte nicht falsch, ich weiß im allgemeinen wie ich die Daten in die DB schreiben kann aber wie baue ich mir eine schöne MVC Struktur damit das alles wirklich Sinn ergibt und reibungslos funktioniert? Da habe ich gerade keine Vorstellung :oops:

Die JTable ist in einem JPanel, genau so wie die Book-Details und das sollten eigentlich meine Views sein und die DB eigentlich mein Model aber was ist dann eigentlich mein JTable Model? Und wie bekomme ich das Zusammenspiel so hin dass bei einer Änderung alle schön benachrichtigt werden?

Grüße und danke im Voraus,
DS
 

Anhänge

  • pleroma.png
    pleroma.png
    17,1 KB · Aufrufe: 85
Zuletzt bearbeitet:

Michael...

Top Contributor
Die JTable ist in einem JPanel, genau so wie die Book-Details und das sollten eigentlich meine Views sein und die DB eigentlich mein Model aber was ist dann eigentlich mein JTable Model? Und wie bekomme ich das Zusammenspiel so hin dass bei einer Änderung alle schön benachrichtigt werden?
Wenn Du Dich am MCV orientierst, würde ich die DB nicht als Model ansehen. Die Datenbank ist ein Ort zur persitenten Speicherung der Daten. Als Model kannst Du ein TableModel nutzen, dass Du aufgrund der zwei Views u.U. erweitern musst. Oder Definierst eine eigene Modelklasse aus der Du dann ein TableModel und ein Model für die Detailansicht ausleitest.
Das Lesen und Speichern in die Datenbank sollte im oder über den Controller laufen. Also entweder direkt dort Implementieren oder in einer zweiten Klasse auslagern.
 

DStrohma

Bekanntes Mitglied
Danke! Hat mir auf jeden Fall geholfen. Aber eine Frage hätte ich noch: Reicht mir dann eigentlich ein einziges Model? Ich hätte jetzt für die Book-Details ein Model erstellt und für die Library (also das Panel mit der JTable) auch eins.

Und wenn ich das Ganze am Anfang initialisiere, dann rufe ich (nachdem das ganze Setup von MVC vorbei ist) den controller auf mit irgendwas derartigem? "controller.initLibrary" um Daten aus der Datenbank auszulesen und an das Model zu schicken? Ist das ansatzweise richtig?

Grüße,
DS
 
Zuletzt bearbeitet:

Michael...

Top Contributor
Weiss jetzt nicht wie weit sich Library und Detail überschneiden, aber vermutlich sind zwei Models besser. Ist auf jeden Fall nicht verkehrt.

Zur Initialisierung: Der Controller benötigt auf jeden Fall eine Methode um das/die Model(s) mit Werten zu befüllen. Wenn die Models von Anfang an gefüllt sein sollen, muss diese natürlich aufgerufen werden. Bei folgendem ist mir nicht ganz klar was gemeint ist :"nachdem das ganze Setup von MVC vorbei ist".

Die Methode würde ich dann allerdings nicht init... nennen, da es ja eine "set", "fill", "refresh" oder "actualize", usw. Methode ist.
 

DStrohma

Bekanntes Mitglied
Ok, soweit alles klar. Was ich mit MVC Setup meinte, ist:
Code:
		controller = new LibraryController();

		viewLibrary = new LibraryView(controller);
		viewDetails = new DetailsView(controller);

		modelLibrary = new LibraryModel();
		modelDetails = new DetailsModel();

		controller.addView(viewLibrary);
		controller.addView(viewDetails);
		controller.addModel(modelLibrary);
		controller.addModel(modelDetails);

Und danach müsste eben noch etwas aufgerufen werden um die (in meinem Fall) JTable zu füllen.
 

DStrohma

Bekanntes Mitglied
Noch eine Frage zum Verständnis: Wenn die ganze Arbeit im Controller gemacht wird - also z.B. die Abfrage der Daten aus der Datenbank und dann das senden an das Model - wozu genau ist dann noch das Model da? Um die Werte zu speichern? Irgendwie leuchtet mir das noch nicht so richtig ein.

Wenn ich von einem Fall ausgehe in dem keine DB verwendet wird, dann kann ich mir das besser vorstellen, weil ich dann weiß dass die Daten nur im Model existieren und eben aus der Model Klasse geholt werden wenn ich sie brauche aber bei einer DB...
 
M

Marcinek

Gast
Ja das modell gibt an, welche Werte gespeichertwerden und wie diese mit anderen in Beziehung stehen.
 

Michael...

Top Contributor
Du hast ja bereits zwei Modelle und angenommen es kommen noch weitere Funktionalitäten und Daten dazu, z.B. ein Ausleihsystem. Dann hast Du mehrere Modelle, die einen direkten Durchgriff auf die Datenbank. Wenn Du jetzt die Datenanbindung/struktur änderst/erweiterst, müsstest Du sämtliche Modelle anpassen. Wenn Du das Datenbankhandling in eine separate Instanz auslagerst hättest Du eine viel losere Kopplung und höhere Flexibilität (was ja die Intention des MVC ist).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
nonickatall Klassen Grundsätzliche Fragen zu geplanter Programmstruktur Allgemeine Java-Themen 5
D Grundsätzliche Fragen zum Heap Space Allgemeine Java-Themen 12
D Grundsätzliche Fragen zur Grafikdarstellung in Spielen Allgemeine Java-Themen 2
Zrebna Fragen zu Testabdeckungs-Metriken Allgemeine Java-Themen 4
MarvinsDepression Unbekanntes Zeichen in fremden Code wirft Fragen auf Allgemeine Java-Themen 4
B HTTP Allgemeine Fragen über Suchmaschine nutzen mit Java Allgemeine Java-Themen 20
K BlueJ - Fragen zu dem Spiel Pacman (Nachprogrammieren) Allgemeine Java-Themen 141
V Ich hätte 2 Fragen Allgemeine Java-Themen 5
ME2002 Fragen aus einer Java Klausur Allgemeine Java-Themen 67
H Fragen zur Kraken Api Allgemeine Java-Themen 1
W Ein paar Fragen zu .properties und .css Allgemeine Java-Themen 6
W Mal ein paar generelle Fragen zu InputStream und OutputStream Allgemeine Java-Themen 4
X Fragen zur Javamail API und Gmail Allgemeine Java-Themen 4
T Fragen bezgl. Lambdas Allgemeine Java-Themen 20
X Collections Fragen zu gleichen Elementen in TreeSet Allgemeine Java-Themen 35
A Neuerungen in Java 8 StreamAPI- Paar fragen Allgemeine Java-Themen 4
temi Fragen zur Software-Architektur Allgemeine Java-Themen 123
M Diverse Design-Fragen Allgemeine Java-Themen 6
J 2 Fragen zur Vererbung Allgemeine Java-Themen 5
H Java FX 2 Fragen um Programm in mehrere sprachen zu übersetzen in Gluon Framwork Allgemeine Java-Themen 3
M Fragen beantworten über Textfeldeingabe Allgemeine Java-Themen 5
J Allgemeine Fragen zu Vererbung Allgemeine Java-Themen 1
M Allgemeine Fragen meinerseits Allgemeine Java-Themen 4
V Wie kann ich die Fragen mit den anderen Klassen verbinden? Allgemeine Java-Themen 1
J Fragen zu generischer doppelt verketteter Liste (bei fehlendem Grundverständnis) Allgemeine Java-Themen 1
R Es gibt keine dummen Fragen (hab ich mal gehört) Allgemeine Java-Themen 11
T Fragen zum Thread-Thema Allgemeine Java-Themen 4
2 2 Klein Fragen Allgemeine Java-Themen 7
alderwaran .jar Code Signing, User-Keystore und Fragen dazu Allgemeine Java-Themen 0
T Fragen zum Thread-Thema Allgemeine Java-Themen 9
A Java Theorie-Fragen Allgemeine Java-Themen 7
K Java QUIZ-Spiel Fragen und Antworten generieren?! Allgemeine Java-Themen 5
R Socket Fragen zu UDP Allgemeine Java-Themen 1
B Noob-Fragen zu Tablets und PC kompatiblität... Allgemeine Java-Themen 6
D Ein paar allgemeine Fragen zu Java Allgemeine Java-Themen 19
L Fragen für Facharbeit: Analyse von Strings in Java Allgemeine Java-Themen 4
R Fragen zu Server + UI Allgemeine Java-Themen 2
U Vier Fragen zu Java Allgemeine Java-Themen 2
H MediaManager Fragen/Probleme Allgemeine Java-Themen 6
D Fragen zum erstellen einer ausführbaren Jar Datei Allgemeine Java-Themen 3
C Polymorphie Fragen zur Annotations von Persistenz Allgemeine Java-Themen 2
O Fragen über Fragen - Bei Änderung XML-Datei -> Anpassung GUI Allgemeine Java-Themen 7
StrikeTom Java Performance Fragen Allgemeine Java-Themen 5
Luk10 Fragen zum ByteBuffer (lwjgl - icons) Allgemeine Java-Themen 2
F Akkumulator Hough-Transformation offene Fragen Allgemeine Java-Themen 4
Luk10 Fragen zu Naming-Conventions Allgemeine Java-Themen 5
Z Einige Fragen Allgemeine Java-Themen 10
T OOP Einige Fragen zu UML-Klassendiagrammen Allgemeine Java-Themen 6
G Einige Fragen zu ResourceBundles Allgemeine Java-Themen 2
S Fragen zu verschiedenen Themen vom JCreator Allgemeine Java-Themen 2
Semox Grapheneditor - Allgemeine Fragen zum Logikdesign Allgemeine Java-Themen 3
O kleine Fragen eines Anfängers Allgemeine Java-Themen 2
X Executor fragen ob fertig Allgemeine Java-Themen 13
nrg Swing 2 Fragen zu Swing/AWT Allgemeine Java-Themen 7
K Reflections Fragen Allgemeine Java-Themen 7
S Fragen zum SCJD-Zertifikat Allgemeine Java-Themen 2
M Backend Entwicklung - Konzept fragen Allgemeine Java-Themen 3
E Fragen zu Scala Allgemeine Java-Themen 11
Daniel_L Fragen zu RegEx und URL umwandeln Allgemeine Java-Themen 4
J Diverse Fragen bezüglich Jasper Allgemeine Java-Themen 3
S Fragen zum ShutdownHook Allgemeine Java-Themen 7
V Fragen zu einem Java Browser Allgemeine Java-Themen 7
G Fragen zum eigenen Scheduler Allgemeine Java-Themen 4
M Drag and Drop: 3 Fragen Allgemeine Java-Themen 3
L Einige Fragen zu Java Allgemeine Java-Themen 9
F Linguistische Fragen zu Javadoc bzw. Englisch Allgemeine Java-Themen 4
E Einfache Fragen zu Dateien Allgemeine Java-Themen 7
E Thread Fragen in Verbindung mit Swing Allgemeine Java-Themen 4
M MVC Design Pattern - Verständniss Fragen Allgemeine Java-Themen 3
X Einige Fragen zu Serialisierung Allgemeine Java-Themen 2
H Java Multiplicoice Test (10 Fragen) Allgemeine Java-Themen 11
J Viele Fragen. =) Hoffentlich könnt ihr helfen Allgemeine Java-Themen 9
J 2 Fragen zu JMF und eine Rechtsfrage Allgemeine Java-Themen 3
S Viele Fragen eines Umsteigers (von .NET) Allgemeine Java-Themen 6
C LinkedList Fragen Allgemeine Java-Themen 7
P Fragen zur JBuilder und den kosten. Allgemeine Java-Themen 7
reibi JVM fragen welche Apps geladen sind Allgemeine Java-Themen 7
I Fragen zum Internetseiten Einlesen/Auswerten Allgemeine Java-Themen 5
F Paket und Software Design Fragen. Allgemeine Java-Themen 5
S 2 Fragen allgemeine fragen zu final und interface Allgemeine Java-Themen 13
M ein paar fragen über JBoss und Catalina Allgemeine Java-Themen 7
D Allgemeine Fragen zum Speichern Allgemeine Java-Themen 3
F allgemeine Fragen zu Java Allgemeine Java-Themen 9
S Fragen zu 4 speziellen Listen Allgemeine Java-Themen 4
U JFrame, JOptionPane - vor dem Schließen Benutzer fragen Allgemeine Java-Themen 10
I zwei simple fragen Allgemeine Java-Themen 22
G 2 Fragen Allgemeine Java-Themen 7
G Fragen zu ausführbaren JAR Files Allgemeine Java-Themen 23
G Fragen zu JTextField bzw. JTextArea Allgemeine Java-Themen 2
J 5 Fragen. Allgemeine Java-Themen 2
P Tausend Fragen... Allgemeine Java-Themen 3
G Aufbau der Packages Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben