Laden...

Designfrage: Daten kennen ihre Bearbeiter

Erstellt von Andreas@Tricept vor 12 Jahren Letzter Beitrag vor 12 Jahren 727 Views
A
Andreas@Tricept Themenstarter:in
289 Beiträge seit 2006
vor 12 Jahren
Designfrage: Daten kennen ihre Bearbeiter

Hallo,

ich habe folgendes Designproblem:

Ich habe eine Datenschicht, darauf aufgesetzt wird eine Model-Schicht.
Ein Model ist einfach eine Bündelung von fachlich sinnvoll zusammengesetzten Daten.

Für jedes Model gibt es eine Bearbeitungsmöglichkeit, eine Oberfläche (Edit-UI).
Mein Problem ist das ich mehrere Models an einer Stelle zur Auswahl anbiete und damit dem Benutzer ermögliche diese zu bearbeiten. Je nach Auswahl benötige ich dafür eventuell eine jeweils andere Edit-UI.

Das habe ich derzeit so realisiert, dass der Entwickler zu der Basisklasse aller Edit-UI's eine statische Methode CreateEditUI(Model) aufrufen kann, welche ihm die jeweils korrekte UI wiedergibt. In der CreateEditUI vergleiche ich jeweils auf den Type des Models und erstelle eine konkrete Edit-UI.

Was mir an dieser Lösung nicht gefällt ist, dass diese nicht objektorientiert ist. Denn ich hole mir die Edit-UI's über ein Mapping anstatt über ein Objektmodell.
Ich kann aber auch nicht in die Models die dafür notwendige UI als referenz speichern, da ich dadurch auf die Schichtentrennung verletzten würde.

Fällt euch für diese Problematik eine gute Lösung ein?

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo Andreas@Tricept,

so wie ich dich verstehe gibt es einen 1:1 Beziehung zwischen Modell und UI. Jedes Modell hat genau ein UI und jedes UI ist genau für ein Modell.

Dann wirst du nicht umhinkommen, diese Beziehung an irgendeiner Stelle zu definieren.

Richtig ist: das Modell sollte das UI nicht kennen. Daher scheidet es schon mal aus, diese Definition im Modell zu hinterlegen. Bleibt daher nur, sie im GUI zu hinterlegen.

Ich sehe im Groben zwei Möglichkeiten: Entweder es gibt irgendwo (im GUI) eine Zuordnungstabelle, bevorzugt ein Dictionary<>. Oder jede UI-Klasse kennt bzw. nennt ihr Modell, bevorzugt über eine entsprechende Property oder ein Attribut.

In beiden Fällen kannst du die eine if-Kette, wie du sie im Moment wohl hast, sparen. Im ersten Fall kannst du durch einen direkten Dictionary-Zugriff den zugehörigen UI-Typ ermitteln. Im zweiten Fall läufst du (z.B. per Reflection) über alle UI-Klassen (z.B. mit dem passenden Attribut), bis du die passende gefunden hast.

herbivore