MVC ernst genommen?

Status
Nicht offen für weitere Antworten.

jherz

Mitglied
Meine Daten sind ein Array von File-Objekten und ich will sie in einer JTable ausgeben. Wenn ich nun die Trennung von Model und View ernst nehmen will, müsste dann nicht des TableModels getValueAt() einfach nur das File-Objekt der jeweiligen Zeile zurückgeben? Die Darstellung des Namens samt Auswahl des passenden Icons und Formattierung der Dateigröße per NumberFormat.format() und des Zeitstempels per DateFormat sollte dann der TableCellRenderer übernehmen.

Allerdings sind das nicht ganz einfache Vorgänge und von daher wäre es zeitsparend das Filearray einmal in ein Array eigener Objekte umzukopieren, die Formattierungen vorzunehmen und den Renderer nur noch setText() bzw. setIcon() machen zu lassen. Ungefähr so machen es auch die Autoren des Buches welches ich hier habe ("Swing" von Manning), nur ist das noch das was MVC sein soll?

Auf welcher Ebene erledigt ihr solche Formattierungsaufgaben?

Grüße,
Jürgen
 

jherz

Mitglied
Auf welcher Ebene erledigt ihr solche Formattierungsaufgaben?

Ich seh' gerade TableRowSorter. Wenn nun das Model schon formattierte Daten (d.h. meistens Stringobjekte) rausgibt, kann man den Sorter vergessen weil dann "20" kleiner als "4" wäre und der "1.4.2009" vor "4.1.2008" zu liegen kommt.
Also ist wohl alles andere als das Modell Rohdaten ausgeben zu lassen fehlschlagen.

Jürgen
 

Ebenius

Top Contributor
Ich würde in jedem Fall die Darstellung den Renderern überlassen. Außer Sortierung gibt es ja noch mehr Gründe; ein Modell sollte sich in aller Regel nicht inhaltlich unterscheiden, nur weil sich die Locale ändert (Formatierung), man könnte später auf die Idee kommen, Dateien ab einer bestimmten Größe farblich hervorzuheben, die Tabelle könnte auch filtern wollen, Clipboard-Operationen sollten ebenfalls -- abhängig vom Transfertyp -- die Zahlendarstellung dem Empfänger überlassen, spätere Implementationen von DnD auf der Tabelle würden schwierig, die Zahlenformatdarstellung im Tooltip (ebenfalls per Renderer) könnte ganz anders aussehen wollen (zum Beispiel exakte Bytes statt 2,4M, 150K, etc), und noch mehr.

Ebenius
 
Zuletzt bearbeitet:

slawaweis

Bekanntes Mitglied
Allerdings sind das nicht ganz einfache Vorgänge und von daher wäre es zeitsparend das Filearray einmal in ein Array eigener Objekte umzukopieren, die Formattierungen vorzunehmen und den Renderer nur noch setText() bzw. setIcon() machen zu lassen. Ungefähr so machen es auch die Autoren des Buches welches ich hier habe ("Swing" von Manning), nur ist das noch das was MVC sein soll?

Auf welcher Ebene erledigt ihr solche Formattierungsaufgaben?
das ist eine zusätzliche Ebene, die Optimierung. MVC ist ein abstraktes Model, reale Werte oder die Hardwareleistung werden hier nicht erfasst. Normalerweise reicht pures MVC auch so für vieles aus. Doch wenn man z.B. mehrere Millionen Zeilen an Daten auf einmal darstellen und bearbeiten muss, zusätzlich noch auf älteren Rechnern, kann man die optimierte Schicht hinzufügen, das wäre quasi: OM(M)VC. OM(M) ist ein Wrapper, der das tatsächliche Model kapselt und es in einer optimieren Form speichert. Der Viewer und der Controller greifen über das OM(M) auf M zu. Bei jeder Änderung an dem Model wird auch das optimierte Model automatisch aktualisiert. Nehmen wir an, unser Model ist ein Feld von File Objekten. Dann definieren wir einen Wrapper, der jedem File ein FileDescription Objekt zuordnet. In FileDescription(File) ist bereits eine optimierte Darstellung gespeichert, die nur noch angezeigt werden muss. Weiterhin kann man für alle großen oder komplexen Operationen einen eigenen Wrapper anlegen, z.B. aufsteigend oder absteigend sortiert, damit quasi immer in allen wichtigen Varianten vorsortiert ist. Das Model M bleibt selber unverändert und muss keine Darstellungsdaten enthalten. Es muss nicht mal sortiert werden.

Slawa
 

Ebenius

Top Contributor
OM(M) ist ein Wrapper, der das tatsächliche Model kapselt und es in einer optimieren Form speichert. Der Viewer und der Controller greifen über das OM(M) auf M zu.
Das Konzept ist mir bekannt, aber dass einen Namen dafür gibt ist mir neu. Cool.

Trotzdem gilt im konkreten Anwendungsfall immer meine Signatur. Erst wenn es sinnvoll wird, sollte optimiert werden.

Ebenius
 

jherz

Mitglied
das ist eine zusätzliche Ebene, die Optimierung. MVC ist ein abstraktes Model, reale Werte oder die Hardwareleistung werden hier nicht erfasst. Normalerweise reicht pures MVC auch so für vieles aus. Doch wenn man z.B. mehrere Millionen Zeilen an Daten auf einmal darstellen und bearbeiten muss, zusätzlich noch auf älteren Rechnern, kann man die optimierte Schicht hinzufügen,

Ich habe keine verfrühte Optimierung vor und mit normalen Verzeichnisgrößen scheint es mit Formattierung im View flüssig zu laufen. Aber da ich es für eine recht zentrale Frage der Aufteilung halte wollte ich dem mal lieber ein paar mehr Gedanken schenken.

das wäre quasi: OM(M)VC. OM(M) ist ein Wrapper, der das tatsächliche Model kapselt und es in einer optimieren Form speichert. Der Viewer und der Controller greifen über das OM(M) auf M zu. Bei jeder Änderung an dem Model wird auch das optimierte Model automatisch aktualisiert. Nehmen wir an, unser Model ist ein Feld von File Objekten. Dann definieren wir einen Wrapper, der jedem File ein FileDescription Objekt zuordnet. In FileDescription(File) ist bereits eine optimierte Darstellung gespeichert, die nur noch angezeigt werden muss. Weiterhin kann man für alle großen oder komplexen Operationen einen eigenen Wrapper anlegen, z.B. aufsteigend oder absteigend sortiert, damit quasi immer in allen wichtigen Varianten vorsortiert ist. Das Model M bleibt selber unverändert und muss keine Darstellungsdaten enthalten. Es muss nicht mal sortiert werden.

Gut, spätestens wenn Daten in zwei verschiedenen Panels unterschiedlich präsentiert werden sollen, würden Formatierungen im Model auf die Nase fallen.
Aber im Prinzip ist so ein Wrapper auch nichts anderes als das, nur eben auf einer anderen Schicht.

Danke an Dich und auch an Ebenius für eure Ausführungen.

Jürgen
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben