Design Datenbank-Applikation



  • Ich versuche mal vorsichtig, eine Frage zu stellen, von der ich nicht weiss, ob sie so einfach zu beantworten ist oder ob sie in diesem Forum möglicherweise schon ein- oder mehrmal beantwortet wurde. Die Suche hat zumindest erstmal nichts ergeben.

    Mich interessiert, wie die Interaktion mit einer Datenbank in eine Anwendung eingebettet werden kann.
    Dazu versuche ich zunächst, grob zu beschreiben, worum es sich bei dieser Anwendung im Speziellen handelt.
    Diese Aufgabe habe ich mir selber als Übung im OOP-Design und Java gestellt.

    Ich schreibe eine Rezepte-Verwaltung, deren Daten in einer Datenbank gehalten werden sollen. Die Beziehung zwischen Oberfläche und Applikation versuche ich nach bestem Wissen und Gewissen nach dem MVC-Pattern umzusetzen.
    Als Daten existiert ein Baum von Kategorien und der Menge von Rezepten, wobei jedem Rezept keine oder mehrere Kategorien zugeordnet sein können.
    Die zugegeben simpel gestrickte Oberfläche weist nun zum einen diesen Kategorien-Baum auf, zum anderen eine Liste von Rezepten (abhängig von den im Kategorien-Baum aktivierten Items), von denen jeweils eines zur Zeit zur detaillierteren Anzeige ausgewählt werden kann.

    Das Model teilt sich zur Zeit in das für die Kategorienverwaltung und den Teil für die Verwaltung der Rezepte (aktuelle Liste, aktuelles Rezept in der Detail-Anzeige) auf.
    Dort existieren Klassen für Rezepte, die Rezept- und die Kategorien-Liste.
    Alle Views kommunizieren mit dem jeweils relevanten "Teil"-Model über Controller-Objekte.

    Die App-Klasse initialisiert die Datenbank-Verbindung, ruft den Konstruktor der Klasse, die den Haupt-Frame darstellt, auf, konstruiert einen MessageHandler, über den ich gerne alle Meldungen an den User bündeln möchte.
    Zusätzlich erstellt sie die 2 Model-Objekte (Kategorien, Rezepte) und übergibt diese über den Umweg über den Haupt-Frame an die Views.

    Nun zu meiner Frage (vielleicht werden es auch mehrere ;)):
    Welche Klasse könnte dafür verantwortlich sein, die Kategorien, Rezept-Liste und das aktuell angezeigte Rezept aus der Datenbank zu holen?
    Die beiden Model-Objekte?
    Eine andere Idee ist, alle Aktionen, die von Änderungen im Interface hervorgerufen werden, vom jeweiligen Controller aus in Form von Objekten nach dem Command-Pattern aufzurufen.
    Zum Beispiel das Ändern von Kategorien im Baum.
    Allerdings müssten diese dann über die DB-Verbindung Bescheid wissen und damit auch die Controller. Die DB-Verbindung könnte allerdings auch von den Models als Member gehalten werden und die Commands sich die Verbindung daherholen.

    Wäre es nicht eh sinnvoll, den Objekten, die Zugang zu "global" benötigten Objekten wie dem MessageHandler oder der DB brauchen, die Instanz der App-Klasse zu übergeben, so dass sie über diese Zugriff auf oben erwähnte Objekte erhalten können?

    Und sollen SQL-Statements zum Beispiel von diesen Command-Objekten erstellt werden? Oder sollte die DB-Klasse "fertige" Methoden zum Beispiel zum Speichern eines Rezeptes bereitstellen? Oder nicht die DB-Klasse, sondern das Rezepte-Model oder gar die Rezept-Klasse?

    Fragen über Fragen ...

    Also ich wäre über jede Hilfe dankbar.
    Wenn noch weitere Informationen benötigt werden, bin ich gerne bereit, diese nachzuliefern.
    Sollte Euch oben bei meinen Gedanken irgendein totaler Blödsinn aufgefallen sein, könnt Ihr mich gerne darauf hinweisen.



  • Für das Thema haben wir sogar im Datenbank Forum einen FAQ Eintrag 😉

    Eigentlicht brauchst du eine Objekt-Orientierte Datenbank, dann kannst du die Objekte einzelnd abspeichern. Aber leider sind die verbreitetsten Datenbanken nicht OO. Deshalb musst du deine Klassen "serialisiren". Unter Java kannst du das wohl irgend wie mit JDBC und EJB oder so machen. Aber damit kenn ich mich leider nicht so aus.



  • Wie ich auf die Datenbank zugreife, ist mir klar. Meine Frage bezog sich eher darauf, in welche Schicht meiner Architektur die Verantwortung fällt, einzelne Daten in die DB zu schreiben.
    Die Daten bestehen aus Feldern, die sich 1:1 in Felder der jeweiligen Tabelle in der DB übersetzen lassen.
    Welche Schicht extrahiert nun beispielsweise aus dem Rezept den Namen, Text, etc und updatet diese Informationen in der DB?

    Ich hoffe, die Fragestellung ist jetzt etwas klarer 😉

    Eine meiner Fragen hat sich gestern Nacht beim Weitergrübeln von selber beantwortet:
    Den MessageHandler und die DB-Klasse bastel ich als Singleton, so dass man von überall in meiner Applikation auf deren Funktionalität zugreifen kann.
    Oder ist das Bockmist?



  • Dieser Thread wurde von Moderator/in kingruedi aus dem Forum Rund um die Programmierung in das Forum Datenbanken verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Hi

    die implementierung des DB interfaces als Singelton ist eigentlich eine gute idea. Bei dem was du machen willst seh ich da keine probleme das da irgendwo hackel könnte. Im DB Inteface würd ich dann die ganzen Get/Set/Add/Update/Delete Methoden implementieren soweie die notwendigen Finders. Dadurch ergibt sich eine schöne trennung zwishen Frontend und Logick.

    @kingruedi
    eine OODB bracht man für sowas nu wirklich nicht. Ich sach nur POET (sptizname unter den Studenten plöt).
    Und was soll bitteschön serialisieren mit einer db zu tun haben? Damit handelt man sich doch nur mehr ärger und platzprobleme ein als sonstwas. Alle referenzierten Objekte eines Objektes werden mit Serialisiert und müssen serialisierbar sein. Heist: serialisierst du den ROOT eines Baumes, hast du den ganzen baum serialisiert und nicht nur den rootknoten. ( ein entsprechender Aufbau vorausgesetzt, der aber bei OO sollte das so sein. denn sonst währen wir ja schon wieder bei einem relationalen DB Design)

    Gruss

    gruss



  • Wie man auf Serialisierung kommt kann ich mir u.U. vorstellen. Oft wird das Stichwort Persistenz synonym für Serialisierung verwendet.

    "Relational Persistence for Idiomatic Java" --> http://www.hibernate.org/



  • Dieser Thread wurde von Moderator/in kingruedi aus dem Forum Datenbanken in das Forum Java verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten