Designproblem "passing objects"

Status
Nicht offen für weitere Antworten.

banshee

Bekanntes Mitglied
Hallo,

ein Grund warum ich designtechnisch wahrscheinlich weniger schönen Code schreibe, ist, dass ich sehr oft an Stellen hängen bleibe, wo es darum geht, Objekte zwischen den verschiedenen Klassen (meistens in der Art Model, View, Controller) hin- und herzuschieben.

Im konkreten Beispiel habe ich eine Hauptklasse, die ein Datenmodell samt JTable zum anzeigen verwaltet. Über einen ButtonListener wird eine Subklasse, ein so genannter FilterManager erstellt. Dabei handelt es sich um eine Klasse, die von JDialog erbt und eben eine funktional schon relativ unabhängige Komponente modelliert. Sie bekommt das Datenmodell übergeben, der User kann verschiedene Filter darauf spezifizieren, anschließend wird ein neues Datenmodell berechnet und das sollte dann irgendwie wieder an die Hauptklasse gehen, die ihre Anzeige updaten soll. Wie mache ich das? Ich komme ja auf FilterManager nicht an das Objekt dran, dass ihn aufgerufen hat oder gibt es da irgendwelche Möglichkeiten?
Ich möchte hier auch nicht mit Kanonen auf Spatzen schießen, also gute Design - ja, aber zur Hauptaufgabe möchte ich es auch nicht machen :>

Zur Veranschaulichung hier nochmal die zwei Klassen in einer Art Pseudocode:

Java:
class Main
{
  private JTable table;
  private DataModel dataModel;

  private handleBtn()
  {
    FilterManager fm = new FilterManager();
  }

  public updateTable(DataModel newModel)
  {
     //...
  }
}

class FilterManager extends JDialog
{
  FilterManager()
  {
    buildGUI();
  }

  handleGUIBtn
  {
    DataModel result = calcNewData();
    // wie krieg ich das jetzt nach Main?
  }
}
 

Marco13

Top Contributor
Wenn der FilterManager ein modaler Dialog ist, würde sowas gehen wie
Java:
class Main
{
  private JTable table;
  private DataModel dataModel;
 
  private handleBtn()
  {
    FilterManager fm = new FilterManager();

    // Blockiert, bis der MODALE Dialog wieder geschlossen wird
    fm.setVisible(true);

    dataModel = fm.getDataModel();
  }
 
  public updateTable(DataModel newModel)
  {
     //...
  }
}
 
class FilterManager extends JDialog
{
  private DataModel result;

  FilterManager()
  {
    buildGUI();
  }
 
  handleGUIBtn
  {
     result = calcNewData();

     // Macht den Dialog unsichtbar - danach geht's oben weiter...
     setVisible(true);
  }
}
 

Michael...

Top Contributor
Im konkreten Beispiel habe ich eine Hauptklasse, die ein Datenmodell samt JTable zum anzeigen verwaltet. Über einen ButtonListener wird eine Subklasse ... erstellt. ... Sie bekommt das Datenmodell übergeben, der User kann verschiedene Filter darauf spezifizieren, anschließend wird ein neues Datenmodell berechnet und das sollte dann irgendwie wieder an die Hauptklasse gehen, die ihre Anzeige updaten soll...
Warum wird denn ein neues Model erzeugt? Ein Model sollte für mein Empfinden ein zentrales Element darstellen, das zwar manipuliert werden kann und dann die Views darüber infomiert, aber nur im äussersten Fall (hatte ich noch nie) zur Laufzeit ersetzt wird.
 

banshee

Bekanntes Mitglied
Hallo,

es hat sich leider ein neues Problem ergeben, da mein Auftraggeber möchte, dass sich der JTable im Hintergrund nach jedem Filtern aktualisiert, während der FilterManager noch offen ist. Wie mache ich das nun am klügsten? Mir würde da spontan ein evenbasierter Ansatz einfallen, ich bin mir aber nicht sicher, ob das nicht übertrieben ist, und welche Alternativen ich habe.

Noch zum Datenmodell: Ich fand das so einfach leichter umzusetzen. Z.B. kann man in den Filtereinstellungen auch auswählen, dass bestimmte Elemente nur ausgeblendet werden, aber eben noch vorhanden sind. Also speichert der FilterManager das Originaldatenmodell und gibt eine "abgespeckte" Variante zurück, die dann angezeigt wird.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben