Harry05 Geschrieben 8. Mai 2017 Geschrieben 8. Mai 2017 (bearbeitet) Aloha Leute, ich habe so eine MVC Struktur meine Frage ist wo und wie. Im Welchem Ordner und wo ist es am Besten? Wie Kriege ich das Hin das man aus mehreren Klassen eine Verbindung hat? Am besten noch das man die Zugangsdaten frei setzen kann (Hostname, Username, Port, Password) zur Datenbank? 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 8. Mai 2017 von Harry05 Zitieren
Whiz-zarD Geschrieben 9. Mai 2017 Geschrieben 9. Mai 2017 Frage 1 und 2 verstehe ich nicht. Was willst du damit sagen? Frage 3 und 4 haben quasi die selbe Antwort: Schaue dir das Repository Pattern an. Zitieren
Harry05 Geschrieben 9. Mai 2017 Autor Geschrieben 9. Mai 2017 (bearbeitet) @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 9. Mai 2017 von Harry05 Zitieren
Whiz-zarD Geschrieben 9. Mai 2017 Geschrieben 9. Mai 2017 (bearbeitet) 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 9. Mai 2017 von Whiz-zarD HJST1979 reagierte darauf 1 Zitieren
Harry05 Geschrieben 9. Mai 2017 Autor Geschrieben 9. Mai 2017 (bearbeitet) @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 9. Mai 2017 von Harry05 Zitieren
Whiz-zarD Geschrieben 9. Mai 2017 Geschrieben 9. Mai 2017 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. Zitieren
pr0gg3r Geschrieben 9. Mai 2017 Geschrieben 9. Mai 2017 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. Zitieren
Harry05 Geschrieben 21. Mai 2017 Autor Geschrieben 21. Mai 2017 @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 Zitieren
Whiz-zarD Geschrieben 21. Mai 2017 Geschrieben 21. Mai 2017 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. Zitieren
Harry05 Geschrieben 21. Mai 2017 Autor Geschrieben 21. Mai 2017 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. Zitieren
Harry05 Geschrieben 21. Mai 2017 Autor Geschrieben 21. Mai 2017 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?? Zitieren
Whiz-zarD Geschrieben 21. Mai 2017 Geschrieben 21. Mai 2017 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. Zitieren
Empfohlene Beiträge
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.