Zum Inhalt springen

MVC und Datenbank verbindung


Harry05

Empfohlene Beiträge

Aloha Leute,

ich habe so eine MVC Struktur mvcPattern.PNG.48ba20f0de04e69c50c503138ecfa853.PNG 

 

meine Frage ist wo und wie.

  1. Im Welchem Ordner und wo ist es am Besten?
  2. Wie Kriege ich das Hin das man aus mehreren Klassen eine Verbindung hat?
  3. Am besten noch das man die Zugangsdaten frei setzen kann (Hostname, Username, Port, Password) zur Datenbank?
  4. Würde das auch gehen, wenn ich es für Mysql habe und  z.B mit sqlite, derby funktionieren die gleiche connection mit anderen Hostname(Logik) oder wider eine neue connection Klasse gebraucht?

ooo und über actions ist das eigentliche Projekt Packet

 

danke im Vorraus es ist mir sehr wichtig das hinzukriegen.

Bearbeitet von Harry05
Link zu diesem Kommentar
Auf anderen Seiten teilen

@Whiz-zarD 

Mit Frage 1 meine ich, gehört die Datenbank Anbindung in den models Ordner mit oder sogar schon raus aus dem MVC Konstrukt.

Mit Frage 2 meine ich, es muss doch eine Verbindung bestehen b.z.w so lange das Programm Läuft, so das die Klassen die Information brauchen, ohne neu zu verbinden sich diese holen.

Fragen über fragen.

tut mir leid war auf einer sheeeeeeeeer schlechten Berufschule (ist noch zu positiv gesagt) wo ich mir alles selber beibringen musste und muss.

Habe mal soooo bestanden(beim zweiten mal) nach Schulwechsel.

 

Bearbeitet von Harry05
Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Models sollten dumme POJOs sein. Es gehört keine Datenbeschaffungslogik in diese Klassen, denn ansonsten hast du eine Abhängigkeit zwischen den Models und der Datenbank. Die Datenbeschaffungslogik liegt dann in den Repositories, die du mit Interfaces kapselst. Dann ist es tatsächlich egal, woher die Daten kommen. Sie können dann aus einer Datenbank,  aus einer XML-Datei oder sonst wo kommen.

Frage 2 ist ein bisschen komplizierter. Es sollte nicht einfach eine Verbindung aufgebaut werden, die die ganze Zeit aktiv ist, solange die Anwendung läuft, sondern sie sollte so lange aktiv sein, wie sie auch benötigt wird. Es kann schon passieren, dass eine Anwendung gleich mehrere Verbindungen aufbaut. Dies ist z.B. in der Parallelisierung erforderlich, damit mehrere Zugriffe parallel verarbeitet werden können. Wenn z.B. eine Berechnung vier Threads aufbaut, dann werden auch vier Verbindungen aufgebaut und wenn die Threads mit ihrer Arbeit durch sind, dann werden die Verbindungen wieder geschlossen.

Bearbeitet von Whiz-zarD
Link zu diesem Kommentar
Auf anderen Seiten teilen

@Whiz-zarD zu Antwort 2 gib's da den keine Performance Schwierigkeiten die das Programm verlangsamen, da immer wider die Verbindung erstellt werden muss?

ich habe keine Vorstellung wie das aussehen soll. Es gibt auch keine Beispiele mit aufgelisteter Projektordner Struktur, wo was hingehört.

Bearbeitet von Harry05
Link zu diesem Kommentar
Auf anderen Seiten teilen

Wie gesagt, das ist ein bisschen abhängig vom Kontext, wann man eine Verbindung aufbaut und wieder schließt. Für die UI haben wir auch eine Verbindung, die wir ein mal beim Starten der Anwendung öffnen und dann beim Beenden schließen, damit man eben nicht Tausend Mal eine Verbindung aufbaut. 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Was mir auffällt ist, dass du das Richtige machen möchtest, das aber falsch angehst. Zum Beispiel hast du einen "SetUserinformationController" und eine "SetUserinformationView". Besser wäre es, einen User-Controller zu haben, ein User-Model und eine View. Die Views könntest du dann noch unterteilen in UserLoginView, UserSignupView, whatever. Das Model enthält zwar die "Daten" des Users, aber das ist nicht das Storage an sich. Stell dir vor, du hast einen User mit Username, E-Mail usw., das ist dann dort drin (im einfachsten Fall nur Getter und Setter). Also reine sogenannte Business-Logik. Im Controller hast du dann die ganzen Methoden, zB einloggen, registrieren, Passwort-vergessen usw. Letztendlich "nimmt" der Controller das entsprechende Model und die entsprechende View und "bastelt" das zusammen. Im optimalen Fall (bzw. je nach Framework) hast du immer nur eine Verbindung zw. Controller und Model und Controller und View (in diesem Fall auch Model-View-Presenter (MVP) genannt).

Eine Struktur kann(!) dann zB so aussehen:

  • Application
    • Views/
      • UserView/
        • SignUpForm
        • LoginForm
        • UserSettings
      • TodoView/
        • TodoList
        • TodoItemDetails
    • Controller/
      • UserController
      • TodoListController
    • Models/
      • UserModel
      • TodoList
      • TodoItem
  • System
    • MVC-Lib...

Im optimalen Fall ist es dann so, dass das Framework die Daten automatisch zur Verfügung stellt (durch eine Hauptklasse des Models), je nachdem woher sie kommen (Stichwort DAO) und du im Controller nur noch sagen musst "Array<TodoItem> items = TodoItem.getAll()" (Beispiel) und dann die "items" einer Liste in der View zur Verfügung hast.

Bevor du dich aber an ein eigenes MVC/MVP-Framework dransetzt, würde ich erst einmal empfehlen, erst vorhandene Frameworks zu nutzen. Hierbei auch ein paar verschiedene Anschauen (oder zumindest jeweils ein zwei Tutorials machen), um die Unterschiede und Vor- und Nachteile je nach Architektur kennen zu lernen, denn auch wenn alle von diesen Logik von Design und Daten trennen, funktionieren sie dennoch unterschiedlich.

Wichtig finde ich auch immer zu wissen, dass MVC nicht alle Probleme löst (und das sollte auch nicht das Ziel sein) und sogar neue Probleme schafft. Zum Beispiel kann ein User ein neues Item erstellen. Macht man das nun im User-Controller oder im TodoList-Controller? Denn ein Item gehört immer zu einem User, aber auch zu einer Liste.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Wochen später...

@pr0gg3r Kannst du mir mal sagen, ob das ist was ich suche in diesem Youtube Film (kannst ja mal durch spulen)?? oder soll ich das Projekt im Anhang anpassen und Benutzen??

ich würde das im Anhang benutzen, doch das Doofe ist, dass ich keine Statische Datenbank generiere, sondern der User kann den Datenbank Namen frei wählen, so wie Ports und so weiter. Ich suche immer noch im Internet aber ich finde nix was ich sagen würde, das ist es.

es muss irgend wie den User halten, da er sich angemeldet hat und über 2 Tabellen geht.

TestDerDatenbank1.rar

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 5 Stunden schrieb Harry05:

ich würde das im Anhang benutzen, doch das Doofe ist, dass ich keine Statische Datenbank generiere, sondern der User kann den Datenbank Namen frei wählen, so wie Ports und so weiter. Ich suche immer noch im Internet aber ich finde nix was ich sagen würde, das ist es.

Wo ist denn das Problem, den Nutzer die Möglichkeit zu schaffen, Benutzername, Passwort, Server, Port, etc. über die Anwendung anzugeben anstatt die Werte statisch im Code zu schreiben?

Du erzeugst einfach eine Singleton-Klasse, die die Konfiguration speichert. Mit Hilfe des Singletons kannst du eine Datenbank-Verbindung aufbauen, die du dann in dein Controller reichst. In diesem Zusammenhang schaue dir mal Hibernate ORM an. Das ist ein Object/Relational-Mapper (O/R-Mapper). O/R-Mapper haben die Aufgabe, Relationale Daten, wie sie in einer relationalen Datenbank stehen, in Objekte, gemäß der Objektorientierung, zu wandeln. O/R-Mapper kapseln schon deine Geschäftslogik von der Datenzugriffsschicht ab, sodass du in der Geschäftslogik gar nicht weißt, woher die Daten stammen. 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 4 Minuten schrieb Whiz-zarD:

Wo ist denn das Problem, den Nutzer die Möglichkeit zu schaffen, Benutzername, Passwort, Server, Port, etc. über die Anwendung anzugeben anstatt die Werte statisch im Code zu schreiben?

ja genau der Nutzer gibt oder auch nicht frei einen Datenbank Namen(Port,pwd,serverNamen...) an z.B db_meineDatenbank oder wenn Feld nicht ausgefüllt ist in der GUI kommt ein Standard Name der Datenbank db_AktenOrdner hin.

jetzt ist hibernate.cfg.xml richtig gut(schön) statisch oder nicht ? oder kann ich dort anhand einer Klasse/Methode den Inhalt anpassen??

und wie halte ich die Verbindung so das nach der User Anmeldung(mit username,pwd) dieser auf seine Ordner und Dokumente zugreifen kann?

Es gibt Tabellen Profil 1:N Aktenordner 1:N Dokumente.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Am 9.5.2017 um 12:45 schrieb Whiz-zarD:

Wie gesagt, das ist ein bisschen abhängig vom Kontext, wann man eine Verbindung aufbaut und wieder schließt. Für die UI haben wir auch eine Verbindung, die wir ein mal beim Starten der Anwendung öffnen und dann beim Beenden schließen, damit man eben nicht Tausend Mal eine Verbindung aufbaut. 

Stich Wort shutdownHock??

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 18 Minuten schrieb Harry05:

jetzt ist hibernate.cfg.xml richtig gut(schön) statisch oder nicht ? oder kann ich dort anhand einer Klasse/Methode den Inhalt anpassen??

Ich muss gestehen, dass ich mit Hibernate direkt noch nicht gearbeitet habe, sondern mit dem .Net-Ableger NHibernate. Dort gibt man in der SessionFactory den Connectionstring mit. Der kann ja dynamisch erzeugt worden sein.

Du kannst bei Hibernate auch die Konfiguration überschreiben:
http://stackoverflow.com/questions/18033288/programmatically-configure-hibernate-with-dynamic-username-and-password

vor 16 Minuten schrieb Harry05:

Stich Wort shutdownHock??

Wie das jetzt unter Java implementiert wird, weiß ich nicht. Das letzte Mal, als ich mit Java entwickelt habe, ist schon einige Jahre her. Ich entwickle hauptsächlich mit C#. Wir haben es so gelöst, wenn das FormClosed-Event vom Hauptfenster ausgeführt wird, schließen wir die Verbindung. Also ja, ein shutdown Hook.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...