Design: Konsistenz von Daten



  • Hallo!
    Wie kann man das folgende Problem elegant lösen:
    Ich habe eine Gui, die mir eine Tabelle ähnlich Excel anbietet, in die man etwas rein schreiben kann. In meinem Fall sind das Informationen über Personen(Name, Telefonnummer, EMail, etc.).

    Jetzt habe ich mir also eine Personenklasse erstellt, allerdings halte ich es nicht für besonders elegant bei jedem eintippen eines Buchstabens die Daten in den Personenobjekten zu ändern. Andererseits ist es auch nicht gut, wenn meine Daten in den Personenobjekten veraltet sind oder soll ich sie wirklich nur aktualisieren wenn ich die Objekte wirklich brauche (zum Beispiel beim speichern). Mir fällt da keine wirklich elegante Lösung ein, aber 2x verschiedene Daten im Speicher zu haben (also einmal in der Tabelle und einmal in meinen Personenobjekten) gefällt mir überhaupt nicht.

    Hoffe ihr habt ein paar Vorschläge.
    Danke im vorraus
    KaPtain Cugel

    [ Dieser Beitrag wurde am 10.06.2003 um 13:06 Uhr von KPC editiert. ]



  • Die doppelte Datenhaltung hat aber auch Vorteile: Du kannst dadurch z.B. ein Cancel realisieren... Du willst ja nicht jede Änderung sofort dauerhaft übernehmen.

    Normal hast Du ein View- oder Dialog-Objekt, das eine Kopie der Daten enthält. Macht man Ok, so schreibst Du die Daten in Deinen Bestand zurück. Macht man Cancel, tust Du nichts.

    Nun der interessante Fall: jemand anderes (anderer Thread) aktualisiert Deinen Datenbestand. Und Du willst den Dialog refreshen mit den neuen Daten.

    Dazu kannst Du Dich eines Publisher-Subcriber-Modells bedienen, d.h. wenn ein Dialog ein Personenobjekt visualisiert, so teilt es dem Verwalter der Personendaten dies mit (er abonniert diese Daten). Wenn nun die Daten aktualisiert werden, schaut man die Liste aller Abonnenten durch und ruft diese auf. Dadurch wird eine Funktion des Dialogs aufgerufen (z.B. durch Msg oder echten Aufruf), diese kann nun entsprechend reagieren, z.B. refreshen, eine Warnung anzeigen, was auch immer. Sobald der View einen anderen Datensatz darstellt, beendet er das Abonnement dieses Datenobjekts wieder.

    Grundsätzlich hast Du eigentlich bei jeder GUI eine doppelte Datenhaltung - im Editfeld, in der Listbox, irgendwo stehen die Informationen immer noch ein zweites Mal drin.



  • Danke, das hilft mir sehr weiter!


Anmelden zum Antworten