MVC - wo Liste der ComboBox-Items ermitteln

OlliL

Bekanntes Mitglied
Hallo,

ich habe in meiner kleinen Swing-Anwendung eine Reihe von ComboBoxen. Als Beispiel mal eine mit den Monaten 1-12. Dahinter steht ein Object (ComboBoxItem) welches 2 Eigenschaften (Id + Bezeichnung) hat. Angezeigt wird die Bezeichnung, datentechnisch verwendet wird die Id.

Nun habe ich damit angefangen, die möglichen Items der jeweiligen ComboBox in der Initialisierung meines Models zu ermitteln, als Liste dort abzulegeni und gleichzeitig an die View via notifyObservers zu senden. Die View hat mit dieser Liste dann die ComboBox aufgebaut.
Die Selektion wurde im Model als ComboBoxItem abgelegt.

Nun habe ich den Fall, das ich a) in mehreren unterschiedlichen Views / Models gleiche ComboBoxen habe, ich bei der Listen-Ermittlung also doppelten Code in den jeweiligen Models habe.
Ausserdem habe ich in einer View eine ComboBox und in einer anderen View bei gleichem Model ein TextField.

Bin zum Schluss gekommen, dass das alles irgendwie Mist ist.

Ich denke ich sollte in dem Model nur die jeweilige Id halten. Wie diese Id in der jeweiligen View dargestellt wird, ob als Auswahl einer ComboBox oder als TextFeld sollte wohl besser der View überlassen bleiben.

Bleibt nur noch zu klären - wie ermittle ich dann für eine ComboBox-verwendende-View die Liste der möglichen Selektionen? Ich will ja für gleiche ComboBoxen welche ich in verschiedenen Views habe, nur einen Initialisierungscode (rufe ein EJB auf, bekomme alle Werte, mache eine Liste aus ComboBoxItem) haben.
Und - in der View ohne ComboBox - dort will ich im TextFeld / Label natürlich auch die Beschreibung anzeigen und nicht irgend eine Zahl.

Was ist dort am sinnvollsten? Eine Helper-Klasse welche static Methoden zur Verfügung stellt? Irgendwie nicht wirklich OOP-like.

Was ist davon zu halten, von jeder "Art" von ComboBox ein ComboBoxModel welches sich z.B. von MutableComboBoxModel ableitet zu erstellen? Wie befülle ich dann das Model am besten? Im Konstruktor?
Das Model müßte ich dann aber auch in den Views nutzen welche die Bezeichnung passend zur Id nur in einem JLabel darstellen. Wäre das unsauber?
 
Zuletzt bearbeitet:
Klingt etwas wirr (und bei dem Lärm kann man sich ja nicht konzentrieren) aber ... "ComboBoxItem" im Modell klingt merkwürdig. Wäre die Übersetzung von "ID" zu "Bezeichner" nicht ggf. Sache eines Renderers? So dass im Modell nur die IDs (z.B. Enum-Elemente) liegen, und jeder Teil der View sich darum kümmert, die passend anzuzeigen (ggf. eben mit einer "MonthListCellRenderer"-Klasse) ...? Aber vielleicht muss ich es mir morgen noch ein paar mal in Ruhe durchlesen... 😳
 
Frohes Neues!

Jo. Ich schrieb ja schon, das im Model wohl am besten nur die "ID" liegen sollte.
Ist dann halt nur die Frage wie ich in Views mit Combo-Boxen am besten alle möglichen Einträge dieser ComboBox in selbige bekomme. Aktuell kuemmert sich halt das Model darum die Liste der Einträge zu besorgen, aber das ist vom Design her irgendwie Mist und ist halt auch teilweise redundant.

Daher suche ich primär nach ner guten Möglichkeit die Listen von ComboBox-Elementen vernünftig durch einen Code zu erzeugen und an mehreren Stellen zu verwenden.

Habe im Model z.B. aktuell sowas stehen:

Java:
	private Vector<ComboBoxItem>					comboMonth;

	public void getComboMonth() {
		if (comboMonth == null) {
			DomainBeanIf domainBean = GetEJBObject.getDomainBean();
			List<DomainValueDTO> domainValueList = domainBean.getAllDomainValues(getSessionDTO(),
					DomainConstants.DOM_MONTHS);

			comboMonth = new Vector<ComboBoxItem>();

			for (DomainValueDTO i : domainValueList) {
				comboMonth.addElement(new ComboBoxItem(Long.valueOf(i.getValue()), i.getMeaning()));
			}
		}

		sendUpdate2Observers(new PropertyDTO(PropertyConstants.PROPERTY_COMBO_LIST_MONTH,
				comboMonth));

	}

Die Methode wird beim initialisieren des Models aufgerufen und meine View bekommt die Liste via Observer Pattern.
Nur habe ich das Zeugs halt in jedem Model wo ich ne ComboBox mit Monaten brauche... Klar man könnte das nun in eine Helper-Klasse mit static auslagern, Aufruf in die View rein und gut ist - Aber ist das "gut"? Monate ist auch nur ein Beispiel. Z.B. Kunden-ID und Kunden-Name könnte ein anderes sein. Es geht also nicht nur um ComboBoxen mit einfachen Daten wie Monatsnamen sondern auch Businessdaten. In eine View gehört das meiner Meinung nach irgendwie nicht rein. Und wenn man am Observer Pattern festhalten will.... verzwickt verzwickt... 😉
 
Ja, auch wenn's schon etwas leiser wird, wird das "heute" wohl nichts mehr, aber... Etwas verwunderlich finde ich auch, dass die Information (d.h. der Vector) über den "Event" weitergereicht wird. Ich gehe üblicherweise in die Richtung, dass das Modell nur sagt: Es hat sich was geändert (und sich jeder, der sich für den neuen Zustand interessiert, diesen aus dem Modell holen kann - als unveränderliche (!) Liste). Aber da gibt es vermutlich verschiedenSTe Ansätze und Stratgien.

Nochmal zusammengefasst: Es geht jetzt darum, dass diese Methode "genau so" nochmal in mehreren anderen Modellen liegt? Ich finde, es spricht da nichts gegen statische Utility-Methoden, die man dort dann nur noch aufruft, aber auch DA gibt es wieder mal unterschiedliche Ansichten ( http://www.java-forum.org/allgemein...-statische-utility-methoden-2.html#post492045 ) - mal schauen ob noch jemand was dazu sagt.
 

Zurück
Oben