Best Practice Fragen zu Projektstruktur einer Datenbank-Abfrage-App (MVC)

Hallo zusammen,

ich tue mich mit der allgemeinen Projektstruktur meiner App etwas schwer und hoffe hier entsprechende Lösungsansätze (Denkansätze) zu bekommen.

Die App ist eine in JavaFX erstellt Oberfläche mit diversen Eingabefeldern und Optionen. Daraus wird eine Datenbankabfrage erstellt und das Ergebnis dann in einer Tabelle angezeigt. Ebenfalls besteht die Möglichkeit das Ergebnis in ein Excel File zu speichern.
Hier habe ich das MVC-Pattern als guten Lösungsansatz auserkoren und eine erste grobe Package Struktur etwas so erstellt:

de.meinprojekt.model
de.meinprojekt.controller
de.meinprojekt.view
de.meinprojekt.main

Ich bin mir jetzt allerdings mehr als unsicher wo ich gewisse Klassen unterbringen soll, ob ich z.B. noch weitere Packages nutzen sollte oder Sub-Folder innerhalb dieser Packages.

Konkret geht es hier z.B. um die Service und Task Klassen die mir das Resultset liefern, die Daten in eine Tableview schreiben oder in ein Excel-File speichern.
Gehören diese Dinge alle in die Controller Struktur oder eher zum Model?
Auch Dinge die z.B. nur das Aussehen der App steuern (z.B. Darkmode / Lightmode).

Ich hoffe mein Problem ist verständlich dargestellt und es findet sich jemand der mir hier unter die Arme greifen kann.

Danke schonmal und Gruß
z
 

Maliko

Bekanntes Mitglied
Also ich würde sagen alles was die Geschäftslogik abbildet gehört ins Model. Die Klassen, welche für die Abbildung der Datenbank zuständig sind und dann nachher die Daten vorhalten, würde ich als Entities noch einmal separat abspeichern.

Alles was sich um die Anzeige in den Views kümmert, gehört in den Controller (wie z.B. auch die Steuerung für Dark-/Lightmode)
 

Robert Zenz

Top Contributor
Also rein technisch gesehen gehoert Logik nicht ins Model, weil das Model ist das Model und hat keine Logik. Aber wie bei so vielen Dingen, ist es immer eine relative Frage. Ich persoenlich sehe ich das immer so das ich zwei grosze Bereiche in meinen Applikationen haben. Einmal das "Backend", Logik, Model, alles was man an Logik und sonstigem braucht, und dann ist da was auch immer es fuer eine Schnittstelle nach Auszen gibt, also GUI oder API oder was auch immer.

Ich bin mir jetzt allerdings mehr als unsicher wo ich gewisse Klassen unterbringen soll, ob ich z.B. noch weitere Packages nutzen sollte oder Sub-Folder innerhalb dieser Packages.

Sub-Pakete solltest du auf jeden Fall verwenden wenn es Sinn macht. Also wenn du unterschiedliche Bereiche hast solltest du die Pakete dann auch entsprechend anlegen und aufbauen um dies widerzuspiegeln.

Konkret geht es hier z.B. um die Service und Task Klassen die mir das Resultset liefern, die Daten in eine Tableview schreiben oder in ein Excel-File speichern.

Das klingt fuer mich vermischt. Etwas das Daten liefert ist Logik/Backend/Controller, etwas das Daten anzeigt oder hinausschreibt ist GUI/View. So in der Art:

Code:
de.meinprojekt
 |-controller
 |  \-DataProvider (Interaktion Datenbank und so weiter...)
 \-view
    |-ExcelFileService (Schreiben in eine Datei)
    \-GUI (Dem Benutzer anzeigen)

Also deine Ansichten oder Schnittstellen nach Auszen, egal was diese machen, verwenden nur deine Logik um die Daten zu erhalten und diese dann anzuzeigen.

Auch Dinge die z.B. nur das Aussehen der App steuern (z.B. Darkmode / Lightmode).

Das ist jetzt die Frage wie die Trennung genau aussehen soll. Wenn du "pures" MVC machst, gehoert das alles in den Controller welcher zur View gehoert. Ich persoenlich halte es aber fuer die Verantwortung der View/GUI wie diese auszusehen hat. Ich denke aber da gibt es einige unterschiedliche Standpunkte was Sinn macht und was nicht. Die eigentliche Idee hinter MVC ist ja dass die Views keinerlei Logik halten sondern alles in den Controllern liegt. Das ist meiner Erfahrung und Meinung nach nur sehr bedingt zielfuehrend, weil es sehr, sehr selten ist dass die Trennung wirklich Sinn macht. Meistens sind die View/Controller Paare ohnehin so stark gekoppelt dass man die View nicht einfach so austauschen kann und beide ein harte gekoppeltes Paar sind.

Aber fuer MVC selbst ist es so dass die View keine unmittelbare Logik enthaelt und sich der Controller um alles kuemmert.
 
Y

yfons123

Gast
da du mit javafx arbeitest musst du deine Struktur anpassen falls du mit maven arbeitest UND mit fxml arbeiten willst
falls du die GUI programmieren willst also mit klassen dann ist das folgende komplett wurscht

"musst" im relativen sinne.. natürlich muss man nicht

der FXMLLoader schaut im aktuellen Ordner und in dem Resource ordner der Parallel dazu existiert zb

Java:
/main
    /source
        /bob
            LoginController.java
    /ressource
        /bob
            Login.fxml
hier würde der FXMLloader in dem LoginController in dem Pfad
/main/source/bob/Login.fxml
zuerst nachschauen ob es da eine solche Datei gibt und wenn nicht schaut der ZUSÄTZLICH
/main/resource/bob/Login.fxml
auch noch hier nach weil das der "Parallele" Ordner im Vergleich zu dem Source Ordner ist


das ist ein Javafx spezielles Feature was man bei einem Code Review erwarten würde.
Der Hintergedanke ist der ... warum soll die fxml rum gurken in dem Source ordner ... fxml ist eine Resource und da hat sich oracle das feature ausgedacht und das funktioniert ziemlich gut

Falls du die Javafx View mit code Programmierst und nicht mit fxml sollte die View in den Source ordner
Als Hinweis: hole dir einen scenebuilder.. da oracle mit seinen accounts und lizenzen jeden auf den sack geht wüürde ich den empfehlen
der ist einfach zu bedienen und es gibt keinen Account Verfikations Bullshit Bingo von Oracle
 

thecain

Top Contributor
der FXMLLoader schaut im aktuellen Ordner und in dem Resource ordner der Parallel dazu existiert zb
Wie kommst du denn auf die Ideen? Also ist zwar eine spannende Theorie, wie das funktionieren könnte, ist aber nicht so.

Nachdem maven die Sourcen kompliert hat, liegt das alles unter /target/classes und zwar sowohl die .class files, als auch alle Ressourcen. Da brauchts kein "Feature" vom FXML Loader
 
Y

yfons123

Gast
Wie kommst du denn auf die Ideen? Also ist zwar eine spannende Theorie, wie das funktionieren könnte, ist aber nicht so.

Nachdem maven die Sourcen kompliert hat, liegt das alles unter /target/classes und zwar sowohl die .class files, als auch alle Ressourcen. Da brauchts kein "Feature" vom FXML Loader
"falls noch jemand daran zweifeln sollte"

Es überrascht mich dass @KonradN es liked obwohl er es selber ausprobiert hat und bestätigt hat dass es so funktioniert
 
Zuletzt bearbeitet von einem Moderator:

KonradN

Super-Moderator
Mitarbeiter
Hier bitte etwas aufpassen und genau unterscheiden:
a) Zur Entwicklungszeit nutzt man den Scene Builder. Dieses Tool bietet eine sehr gute Integration vom Controller und man kann bei der Auswahl der aufzurufenden Methoden die Methoden des Controllers in Drop Down Menus auswählen
==> Dies funktionierte bei meinen damaligen Tests nur, wenn der Speicherort der fxml Datei dem package des Controllers entsprochen hat. (Das dürfte aber ein Bug sein, der ggf. in neuen Version behoben sein wird!)

b) Zur Laufzeit werden hier Dinge geladen. Hier kommt der FXMLLoader ins Spiel. Hier gibt es dann keine src Verzeichnisse mehr sondern nur noch einen Classpath und über den Classloader wird dann der Controller geladen. Dabei spielt das Package keine Rolle mehr. Und der Speicherort ist auch egal - hier wird mit einer URL die Datei geladen - der Speicherort spielt also keine Rolle!

Also immer gut aufpassen - ersteres ist als nur Scene Builder / Entwicklungszeit und da gibt es den Classpath nicht. Und das Zweite ist FXMLLoader / Laufzeit - da gibt es diese src Ordner nicht mehr sondern nur eine (beliebige) URL für das fxml und einen Classloader, der den Controller vom Classpath lädt.

Also man kann die Dateien beliebig legen. Dann funktioniert der SceneBuilder auch (mit kleinen Abstrichen wegen dem Bug).
 

KonradN

Super-Moderator
Mitarbeiter
ich muss aber dann gar keine URL mehr eintippen
Du musst dem FXMLLoader im Programmcode eine URL übergeben. Da wird auch in der Regel nichts eingetippt.

Und nein - FXMLLoader hat keinen Konstruktor, der einen String nimmt. Was Du vermutlich im Kopf hast ist etwas wie:
new FXMLLoader(getClass().getResource("bob.fxml")
und hier wird die bob.fxml nicht im Resource Ordner gefunden. getClass.getResource nutzt den Classloader um die Ressource auf dem Classpath zu suchen. Der Classloader gibt eine URL zurück. Der FXMLLoader bekommt also eine URL.

Und der Ablauf ist, wie es @thecain schon etwas gesagt hat:
  • Beim Build Prozess werden die *.java Dateien übersetzt und landen dann im Zielverzeichnis.
  • Die Resourcen werden vom Build Prozess in das Zielverzeichnis kopiert.
Bei maven ist das Zielverzeichnis target/classes

Und beim start werden die Daten dann z,B. von dort genommen. Oder der Build Prozess baut daraus ein JAR oder es wird ein Image gebaut oder .... - egal wie: Die Dateien (.class, .fxml, ...) sind am Ende im Classpath.
 
Vielen Dank für die teils ausführlichen Antworten und auch aus den Diskussionen die hier entstanden sind kann ich das ein oder andere rausziehen!
Für diejenigen die es interessiert, ich arbeite mit dem SceneBuilder von Gluon und erstelle das Projekt ohne Maven.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Zrebna Fragen zu einem Klassendiagramm Java Basics - Anfänger-Themen 8
H Fragen zu Wrapperklassen Java Basics - Anfänger-Themen 29
A Bei VierGewinnt fragen ob man gegen CPU oder Menschen spielen will. Java Basics - Anfänger-Themen 7
A Bei VierGewinnt vorher fragen, ob man gegen den Computer spielen möchte oder gegeneinander. Java Basics - Anfänger-Themen 1
A Bei VierGewinnt fragen, ob man gegen den Computer spielen möchte oder gegeneinander Java Basics - Anfänger-Themen 1
sserio Wie kann man nach einer Klasse fragen? Java Basics - Anfänger-Themen 12
G Fragen zu Kompelierfehler in Aufgabe. Java Basics - Anfänger-Themen 25
E Bäume/ allgemeine Fragen Java Basics - Anfänger-Themen 21
O Falsche Antworten zu Fragen Java Basics - Anfänger-Themen 4
S Diverse Fragen vor Schulaufgabe ;) Java Basics - Anfänger-Themen 4
S Fragen zu Ausgabe double und float Java Basics - Anfänger-Themen 3
B fragen zu Aufbau eines UML-Klassendiagramm Java Basics - Anfänger-Themen 1
C 3 Fragen rund um Klassenattribute Java Basics - Anfänger-Themen 8
L Erste Schritte Log4J Fragen Java Basics - Anfänger-Themen 5
NeoLexx Fragen zu diversen Elementen der Javabibliothek Java Basics - Anfänger-Themen 5
D Budget Manager fragen zur Umsetzung Java Basics - Anfänger-Themen 9
N Fragen zur Datenspeicherung Java Basics - Anfänger-Themen 45
T Java Anfänger mit konkreten Fragen Java Basics - Anfänger-Themen 2
CT9288 Fragen zu Java Java Basics - Anfänger-Themen 16
W Fragen zu Generics Java Basics - Anfänger-Themen 14
T ObjectInput/OutputStream Fragen zur Funktionsweise Java Basics - Anfänger-Themen 3
J Fragen zu einer Methode Java Basics - Anfänger-Themen 3
J Fragen zum Code aus dem Buch "Schrödinger programmiert Java 2.te Ausgabe" Java Basics - Anfänger-Themen 6
Z Fragen zu Exception (Throws/throw) Java Basics - Anfänger-Themen 7
J Fragen zu Input/Output Java Basics - Anfänger-Themen 3
J Erste Schritte Oracle Tutorials zu Java 8 - Fragen dazu Java Basics - Anfänger-Themen 1
H Java Quereinsteiger Roadmap und Fragen Java Basics - Anfänger-Themen 29
H fragen Java Basics - Anfänger-Themen 15
M Samelsarium Grundlegender Fragen 2 Java Basics - Anfänger-Themen 9
M Sammelsarium an Grundlagen Grundlagen Fragen Java Basics - Anfänger-Themen 11
B Java ist / wird kostenpflichtig. Ein paar Fragen Java Basics - Anfänger-Themen 1
J Fragen zu synrchonized und kritischen Abschnitten Java Basics - Anfänger-Themen 5
S Fragen zu einem Rechentrainer Java Basics - Anfänger-Themen 2
B Java Vererbung Fragen (zu Code Beispiel) Java Basics - Anfänger-Themen 3
J Wo kann man Fragen zu ireport stellen. Java Basics - Anfänger-Themen 0
M Fragen zum Anlegen und Benutzen von Listen Java Basics - Anfänger-Themen 9
G Ein paar Anfänger Fragen zu StdDraw Java Basics - Anfänger-Themen 4
D Fragen zur Klassen Java Basics - Anfänger-Themen 4
Aprendiendo Zwei Fragen und ein geerbtes "protected"-Attribut Java Basics - Anfänger-Themen 2
J Interface Fragen bezüglich "Sauberkeit" von Code Java Basics - Anfänger-Themen 5
D Objekte-Fragen Java Basics - Anfänger-Themen 1
V Erste Schritte Habe Fragen zu der For und While Schleife als auch Inkrement und Dekrement Java Basics - Anfänger-Themen 4
D Anfänger-Fragen(Parameter einer Methode) Java Basics - Anfänger-Themen 7
K Zwei Fragen zu Graphics/Graphics2D Java Basics - Anfänger-Themen 5
R Fragen über den Konstruktor Java Basics - Anfänger-Themen 0
Azazel Ein paar Fragen zu Methodenaufrufen(java.awt) Java Basics - Anfänger-Themen 2
S Erste Schritte Fragen zur For-Schleife Java Basics - Anfänger-Themen 9
C Interface Fragen zum Interface Java Basics - Anfänger-Themen 7
GreenTeaYT Exception und zur OOP fragen? Java Basics - Anfänger-Themen 3
C Fragen zum Spigot Plugin (1.8) Java Basics - Anfänger-Themen 6
J Fragen zu Exceptions Java Basics - Anfänger-Themen 24
N Quiz- Fragen zufällig anzeigen lassen Java Basics - Anfänger-Themen 7
J Verschieden Fragen über Java Programmierung Java Basics - Anfänger-Themen 3
L Viele Fragen zu den Grundlagen Java Basics - Anfänger-Themen 5
B Fragen zu ZIP-File Java Basics - Anfänger-Themen 9
L fragen zu arrays Java Basics - Anfänger-Themen 8
L Fragen zu selbstgeschriebenem Programm Java Basics - Anfänger-Themen 5
M Fragen zum Auslesen von HTML Seiten Java Basics - Anfänger-Themen 5
J Threading-Aufgabe. Totale Noob Fragen, aber bitte trotzdem beantworten ;) Java Basics - Anfänger-Themen 7
S Java Fragen Konstruktor & Statische Methoden Java Basics - Anfänger-Themen 4
K Erste Schritte Frage Antwort Spiel - Fragen zur Planung Java Basics - Anfänger-Themen 2
C Java Applet Fragen: Serialisierung, Excel import Java Basics - Anfänger-Themen 2
Anfänger2011 2 kleine Fragen zu ArrayListen Java Basics - Anfänger-Themen 5
S Fragen zu Ausdrücken&Bedingungen Java Basics - Anfänger-Themen 5
A 2 kurze Anfänger fragen Java Basics - Anfänger-Themen 6
H grundlegende Fragen Java Basics - Anfänger-Themen 3
V Interface ich schäme mich das zu fragen, aber ich schaff nicht ein Text zu zentrieren :( [javaFX] Java Basics - Anfänger-Themen 6
N Programm: Fragen beantworten Java Basics - Anfänger-Themen 6
C Anfänger Anfänger Fragen Java Basics - Anfänger-Themen 8
Z Compiler-Fehler LinkedList Fragen Java Basics - Anfänger-Themen 4
D Rekursion Allgemeine Fragen Java Basics - Anfänger-Themen 2
D [Fragen] zu Methoden Java Basics - Anfänger-Themen 2
S Fragen zur Implementierung eines Binärbaums Java Basics - Anfänger-Themen 3
T Ein paar Fragen zu OOP und Java. Java Basics - Anfänger-Themen 16
J Allgemeine Fragen zur GUI Java Basics - Anfänger-Themen 1
johnnydoe Erste Schritte Erster Blick - erste Fragen Java Basics - Anfänger-Themen 11
DStrohma Grundsätzliche Fragen zu Drag & Drop Java Basics - Anfänger-Themen 1
N Klassen fragen zur getter und setter methode Java Basics - Anfänger-Themen 11
S 3 Fragen, Verzeichnis, GridLayout psoitionieren, Werte für JSpinner Java Basics - Anfänger-Themen 2
T Fragen zu Set / Relationen verknüpfen Java Basics - Anfänger-Themen 4
S 2 Fragen Java Basics - Anfänger-Themen 4
S Hallo und Fragen zu Arbeitsverzeichnis und Menü Java Basics - Anfänger-Themen 8
N Java Fragen... Java Basics - Anfänger-Themen 10
F ExecutorService Fragen! Java Basics - Anfänger-Themen 2
O HashMap Fragen Java Basics - Anfänger-Themen 8
C Fragen zu Arrays Java Basics - Anfänger-Themen 19
T viele "kleine" Fragen... Java Basics - Anfänger-Themen 3
S Fragen zur Implementierung eines Adressbuches Java Basics - Anfänger-Themen 20
S Fragen zu Arrays Java Basics - Anfänger-Themen 6
K Diverse Fragen zum Fehlerlogging Java Basics - Anfänger-Themen 9
N StringReader - Fragen Java Basics - Anfänger-Themen 8
C Einige Fragen zu Frames Java Basics - Anfänger-Themen 7
M Erste Schritte Allgemeine Fragen Java Basics - Anfänger-Themen 4
PaulG Fragen zu Binärbaum Java Basics - Anfänger-Themen 21
P Methoden Aquarium (Fragen zum Scanner) Java Basics - Anfänger-Themen 5
T Erste Schritte Fragen zu meinen kleinen Programm Java Basics - Anfänger-Themen 9
D 2 Fragen: Position ändern vs. LayoutManager / Bilder einfügen im Vordergrund Java Basics - Anfänger-Themen 3
O Zwei Fragen zu Methoden Aufrufen Java Basics - Anfänger-Themen 5
B fragen zur for-schleife und arrays Java Basics - Anfänger-Themen 8
J 2 Fragen zu Befehlen Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben