Moinsen!
Folgende Situation:
Eine Client-Anwendung liest und schreibt seine Daten aus einer Datenquelle. In der Anwendung kann folgendes passieren:
- Daten werden geändert (aus der Datenquelle gelesene Daten wurden geändert und müssen zurückgeschrieben werden)
- Daten werden gelöscht (aus der Datenquelle gelesene Daten wurden gelöscht und müssen nun aus der Datenquelle entfernt oder dort archiviert werden)
- Daten werden erzeugt (der Client erzeugt neue Daten, die in die Datenquelle eingefügt werden müssen)
- Daten bleiben wie sie sind (Daten aus der Datenquelle werden nicht verändert)
Faktisch startet eine Anwendung und lädt benötigte Daten, in meinem Fall kommen sie aus einer SQL-Datenbank und werden via XML-RPC transferiert. Meine Denksportaufgabe ist wie ich die Daten in der Anwendung und der Datenbank synchron halte, dabei ist vereinfacht eine Sngle-User-Umgebung anzunehmen (der Multi-User-Fall wird durch Locking ausgeschlossen).
Meine bisherigen Überlegungen:
Im Grunde müsste ich für meine Datenobjekte sowas wie eine zantrale Verwaltung (Liste o.ä.) haben. Beim Speichern der Daten aus der Anwendung würde ich die Liste durchgehen, das Datenobjekt untersuchen und entsprechend agieren. Dazu wäre es vermutlich am praktischsten diese Objekte über eine Factory zu erzeugen. Jedes Datenobjekt müsste ein Interface implementieren, über das ich setze und abfrage ob die enthaltenen Daten mit der Datenquelle synchron (INSYNC) sind, zu löschen sind (DELETE), neu sind (NEW) oder sich geändert haben (CHANGED).
Problem:
a) Ein Datenobjekt mit Daten aus der Datenquelle wird im Programmverlauf auf null gesetzt. So hab ich keine Möglichkeit mehr nachzuvollziehen um welche Daten es sich handelte und ob und wie ich sie in der Datenquelle behandeln soll. Ich kann mir ne Richtlinie ausdenken um diesen Fall abzufangen, aber das ist macht die Implementierung unnötig komplex und fehleranfällig. Schön wäre es wenn das Programm selbst daraus resultierende Probeme abfangen könnte.
b) Mein Java Patterns Workbook ist gerade nicht bei der Hand
Da es sich um ein Problem handelt, das so ziemlich jede Datenbankanwendung hat, muss es da doch Erfahrungswerte und empfehelnswerte Lösungswege geben. Entweder hab ich aber gerade ein Brett vorm Kopf oder .. oder nicht..
Eben kam mir noch die Idee statt einer Liste meine Datenobjekte nochmals zusätzlich in ein Objekt zu packen und dies stattdessen in die Liste zu setzen. Würde das Datenobjekt ge-nullt, wäre das Wrapper-Objekt noch intakt und darin würde ich noch Meta-Infos ablegen um die Beziehung Datenobjekt->DB-Daten herstellen zu können.
Vielleicht hat hier ja wer die eine oder andere Anregung. Googel liefert zu den passenden Stichworten alles, nur nichts zu diesem Thema..
Folgende Situation:
Eine Client-Anwendung liest und schreibt seine Daten aus einer Datenquelle. In der Anwendung kann folgendes passieren:
- Daten werden geändert (aus der Datenquelle gelesene Daten wurden geändert und müssen zurückgeschrieben werden)
- Daten werden gelöscht (aus der Datenquelle gelesene Daten wurden gelöscht und müssen nun aus der Datenquelle entfernt oder dort archiviert werden)
- Daten werden erzeugt (der Client erzeugt neue Daten, die in die Datenquelle eingefügt werden müssen)
- Daten bleiben wie sie sind (Daten aus der Datenquelle werden nicht verändert)
Faktisch startet eine Anwendung und lädt benötigte Daten, in meinem Fall kommen sie aus einer SQL-Datenbank und werden via XML-RPC transferiert. Meine Denksportaufgabe ist wie ich die Daten in der Anwendung und der Datenbank synchron halte, dabei ist vereinfacht eine Sngle-User-Umgebung anzunehmen (der Multi-User-Fall wird durch Locking ausgeschlossen).
Meine bisherigen Überlegungen:
Im Grunde müsste ich für meine Datenobjekte sowas wie eine zantrale Verwaltung (Liste o.ä.) haben. Beim Speichern der Daten aus der Anwendung würde ich die Liste durchgehen, das Datenobjekt untersuchen und entsprechend agieren. Dazu wäre es vermutlich am praktischsten diese Objekte über eine Factory zu erzeugen. Jedes Datenobjekt müsste ein Interface implementieren, über das ich setze und abfrage ob die enthaltenen Daten mit der Datenquelle synchron (INSYNC) sind, zu löschen sind (DELETE), neu sind (NEW) oder sich geändert haben (CHANGED).
Problem:
a) Ein Datenobjekt mit Daten aus der Datenquelle wird im Programmverlauf auf null gesetzt. So hab ich keine Möglichkeit mehr nachzuvollziehen um welche Daten es sich handelte und ob und wie ich sie in der Datenquelle behandeln soll. Ich kann mir ne Richtlinie ausdenken um diesen Fall abzufangen, aber das ist macht die Implementierung unnötig komplex und fehleranfällig. Schön wäre es wenn das Programm selbst daraus resultierende Probeme abfangen könnte.
b) Mein Java Patterns Workbook ist gerade nicht bei der Hand
Da es sich um ein Problem handelt, das so ziemlich jede Datenbankanwendung hat, muss es da doch Erfahrungswerte und empfehelnswerte Lösungswege geben. Entweder hab ich aber gerade ein Brett vorm Kopf oder .. oder nicht..
Eben kam mir noch die Idee statt einer Liste meine Datenobjekte nochmals zusätzlich in ein Objekt zu packen und dies stattdessen in die Liste zu setzen. Würde das Datenobjekt ge-nullt, wäre das Wrapper-Objekt noch intakt und darin würde ich noch Meta-Infos ablegen um die Beziehung Datenobjekt->DB-Daten herstellen zu können.
Vielleicht hat hier ja wer die eine oder andere Anregung. Googel liefert zu den passenden Stichworten alles, nur nichts zu diesem Thema..