3 Schichtenarchitektur , IDAO

Sandro95

Bekanntes Mitglied
Guten Abend Leute ,
ich verstehe nicht ganz wie das mit der IDAO funktioniert.
Mir ist bewusst , das man sein Projekt bei der Architektur und 3 Pakte ( Gui , Fachlogki und Datenhaltung ) aufteilen sollte.
Nut verstehe ich nicht ganz wie das mit der IDAO gemacht wird finde dazu leider auch nichts passendes im Netz.

Ich habe im Anhang mal mein Studiumprojekt angehangen .
Jedes mal wenn ich bei der Bildview beim Fenster alles eintrage und auf neu drücke kommen versch exception Zb eine NullPointer kann das nicht ganz nachvollziehen .

vlt kann mir ja jmd behifich sein

Danke ich voraus leute
 

Anhänge

  • New.zip
    29,1 KB · Aufrufe: 4

Sandro95

Bekanntes Mitglied
Ja , bei uns in der Uni heißen die drei Shichten , view (GUI) , Fachlogik und Datenhaltung.
@mihe7 wie würdest du denn mein Projekt implementieren , das die Fachlogik mit der Datenhaltung kommunizieren kann ?
 

mihe7

Top Contributor
Ja , bei uns in der Uni heißen die drei Shichten , view (GUI) , Fachlogik und Datenhaltung.
@mihe7 wie würdest du denn mein Projekt implementieren , das die Fachlogik mit der Datenhaltung kommunizieren kann ?
Es gibt Repositories, die den Zugriff auf die Daten kapseln und vom Rest der Anwendung genutzt werden können. Was genau sollt Ihr denn machen? Und wofür steht IDAO?!?
 
K

kneitzel

Gast
MVC ist aber etwas anderes als die Aufteilung, die hier gefordert es. Das hier angesprochene geht eher Richtung 3-tier.

Und das IDao ist nur der Name eines zu Implementierenden Interface ... Halt bei der Übung das Interface für das Data Access Object.

Was ich gerne nutze ist eine Dependency Injection. Dann habe ich halt in meinem Code lediglich, dass ich eine IDao Instanz brauche und die bekomme ich dann per Konfiguration oder eben durch die Automatismen von Spring Boot. Hat den Vorteil, dass diese Implementierung jederzeit von Außen angepasst werden könnte.

Du kannst das aber auch über andere Wege nutzen, so man kwon DI Framework nutzt:
- wir haben ohne DI meist es so gehandhabt, dass de DAO einfach zu erstellen waren. Und dann war da halt einfach immer wo man es brauchte ein: IDao dao = new DaoImpl()

Bei den Komponenten ist die Abhängigkeit aber wichtig. Es sollten diese 3 Komponenten nur Abhängigkeiten in eine Richtung haben. Die GUI kennt dann die Fachlogik aber nicht umgekehrt.
Damit die GUI dann Änderungen mit bekommen kann, sind dann halt ggf Events notwendig, für die sich GUI Elemente dann eintragen können... oder die GUI implementiert Interfaces, die die Fachkomponente bereit stellt und die dann bekannt sind. Aber ich denke, dass der Aufbau bei so Schichten prinzipiell bekannt ist. (Ich habe die Aufgabe nicht im Detail gelesen, da ich nur noch auf dem Handy aktiv bin ...)
 

Sandro95

Bekanntes Mitglied
Das die Abhängigkeit wichtig , weiß ich , die Gui kennt die Fachlogik und die Fachlogik kennt die Datenhaltung . Der Aufbau ist mir ebenfalls bekannt
Ich find leider meinen Fehler nicht , warum das bei der Ausführung ( wie anfangs beschrieben ) nicht klappt @JustNobody
 
K

kneitzel

Gast
Ich kann auf Deinen Code erst morgen schauen, da ich nur noch auf dem Handy aktiv bin. Falls mir niemand anderes zuvor kommt schau ich dann.
 

mrBrown

Super-Moderator
Mitarbeiter
Das nennt sich Model, View und Controller-Architekturmuster. Siehe hier https://de.wikipedia.org/wiki/Architekturmuster#Interaktive_Systeme .
MCV ist etwas anderes als Schichtenarchitektur. Sie kommen zwar oft zusammen vor, und Teile aus dem einen entsprechen Teilen aus dem anderem, sind aber auf unterschiedlichen Ebenen angesiedelt.
Hier würde am ehesten Gui Controller und View umfassen, und Fachlogik und Datenhaltung zusammen bilden das Model.
 

mihe7

Top Contributor
Hier im anhang befindet sich die AUfgabe @mihe7
In dem Fall ist das DAO der Teil, der den Zugriff auf die Datenquelle kapselt. Implementierungen können z. B. den Zugriff auf Dateien, Datenbanken, Hashtables, Collections usw. regeln.

In der Regel läuft das so, dass Du ein konkretes DAO instantiierst und Deiner Fachlogik mitgibst (dependency injection), die natürlich ein beliebiges Objekt mit IDao-Schnittstelle erwartet.
 

mihe7

Top Contributor
Mal ein Fehler, der mir aufgefallen ist:
Java:
    public AudioerfassungView(Stage stage, Audio audio) {
        this.primarstage = primarstage;
Muss wohl
Java:
    public AudioerfassungView(Stage stage, Audio audio) {
        this.primarstage = stage;
heißen.

Dann bekommst Du natürlich eine NPE, wenn Du Dein bild in
BilderfassungView bild = new BilderfassungView(stage,null);
mit null initialisierst und später einfach darauf zugreifst. Im EventHandler von bildneu gibst Du dagegen richtigerweise ein neues Bild mit.
 

Sandro95

Bekanntes Mitglied
so , der compiler zeigt mir in zeile 98 der Bilderfassung eine exception , doch ich weiß nicht wieso . Ich setze dort ja einfch den inhalt aus meinem TextField t1 auf bild.setTitel @mihe7
 
K

kneitzel

Gast
Im Hauptfenster erzeugt Du eine Instanz von Bilderfassung:
BilderfassungView bild = new BilderfassungView(stage,null);

Dadurch ist bild null.

Und wenn Du dann auf bild zugreifst, bekommst Du natürlich die NPE.

Das Gleiche natürlich bei der Audioerfassung.

Daher könntest Du da statt null jeweils ein new Bild() bzw. new Audio() übergeben. (Hauptfenster Zeilen 61 / 63)

Edit: Und den Titel vom Bilderfassungsfenster solltest Du einmal prüfen. "Bilderauffassung" soll das wohl nicht sein, oder?
 

Neue Themen


Oben