Ich versuche gerade mein Programm nach dem MVC Prinzip umzubauen.
Dabei habe ich aber das Problem der Ebenen; ich habe die Liste mit allen Gerichten diese beinhaltet einzelne Gerichte welche widerrum Zutaten beinhalten.
Im View habe ich zwei Fenster. Den Haptframe der eine Tabelle mit allen Gerichten darstellt. Das ist soweit kein Problem, wie im MVC-Beispielcode aus den FAQ kennt der Hauptframe das Contoller-Interface und wird mittels Observer-Pattern über Änderungen im Model informiert.
Wenn es relevant ist hier das Codegerüst:
Und auch das TableModel der Tabelle ist auch Observer der auf Änderungen wartet.
Das Problem ist mir Fehlt jetzt ein Ansatz für das Bearbeiten bzw. Anlegen von neuen Gerichten.
Derzeit überlege ich für jede Ebene im Model einen Controller (der einfach heit halber durchnummerriert) zu schreiben.
Also wenn der Controller1 ein Element der Ebene 2 hinzufügt wird immer ein Coltroller2 mit dem Element verknüpft usw.
Zur verständlichkeit noch ein Stückchen Code wie ich mir das Vorstelle: (ein Gericht (Ebene 2) bekommt eine Zutat (Ebene 3))
Bei diesem Ansatz gibt es meiner Meinung nach zwei mehr oder weniger große Probleme:
Man muss die Controller List und das Model Objekt sychron halten. (also wenn ich eine Zutat aus dem Model lösche muss ich den Controller auch löschen, da sonst das Programm mit den Indizes in durcheinander kommt)
Und die View Ebene muss sich auf Indizes verlassen können (z.B. braucht der EditButton in der View Ebene 1 den Index des zu bearbeitenden Gerichtes (Ebene2))
Das 2. Problem ist mehr oder weniger das erste, nur im View...
Ist das der richtige Ansaz oder denke ist in die falsche Richtung?
Dabei habe ich aber das Problem der Ebenen; ich habe die Liste mit allen Gerichten diese beinhaltet einzelne Gerichte welche widerrum Zutaten beinhalten.
Im View habe ich zwei Fenster. Den Haptframe der eine Tabelle mit allen Gerichten darstellt. Das ist soweit kein Problem, wie im MVC-Beispielcode aus den FAQ kennt der Hauptframe das Contoller-Interface und wird mittels Observer-Pattern über Änderungen im Model informiert.
Wenn es relevant ist hier das Codegerüst:
Code:
public class MainFrame implements Observer {
public MainFrame(Language langfile, ListControllable c) {
// ...
}
public void update(Observable o, Object arg) {
GerichtList l = (GerichtList) arg;
lblAnzahl.setText(lang.getString("anz") + ": " + l.getLenght() );
}
// ...
}
Das Problem ist mir Fehlt jetzt ein Ansatz für das Bearbeiten bzw. Anlegen von neuen Gerichten.
Derzeit überlege ich für jede Ebene im Model einen Controller (der einfach heit halber durchnummerriert) zu schreiben.
Also wenn der Controller1 ein Element der Ebene 2 hinzufügt wird immer ein Coltroller2 mit dem Element verknüpft usw.
Zur verständlichkeit noch ein Stückchen Code wie ich mir das Vorstelle: (ein Gericht (Ebene 2) bekommt eine Zutat (Ebene 3))
Code:
public class Controller2 implements GerichtControllable {
private ArrayList<Controller3> controllers = new Arraylist<Controller3>();
private Gericht gericht; // im Konstructor übergeben
public void addZutat() {
Zutat z = new Zutat(0.0, "", ""); // Standartwerte
gericht.addZutat(z);
controllers.add(new Controller3(z));
}
}
Bei diesem Ansatz gibt es meiner Meinung nach zwei mehr oder weniger große Probleme:
Man muss die Controller List und das Model Objekt sychron halten. (also wenn ich eine Zutat aus dem Model lösche muss ich den Controller auch löschen, da sonst das Programm mit den Indizes in durcheinander kommt)
Und die View Ebene muss sich auf Indizes verlassen können (z.B. braucht der EditButton in der View Ebene 1 den Index des zu bearbeitenden Gerichtes (Ebene2))
Das 2. Problem ist mehr oder weniger das erste, nur im View...
Ist das der richtige Ansaz oder denke ist in die falsche Richtung?