Bisherige Teile dieser Lecture
Falls Sie die bisherigen Teile dieser Lecture noch nicht kennen:
- Generische Datenspeicherung mit XML - Teil 1 (Einführung)
- Generische Datenspeicherung mit XML - Teil 2 (Generic Entity Data Storage)
- Generische Datenspeicherung mit XML - Teil 3 (XML Datei als Generic Entity Data Storage)
Kurze Rekapitulation was wir machen wollen
Wir wollen also einen weiteren Generic Entity Data Storage implementieren, in welchem Generic Entities gespeichert werden sollen. Als Speicherort des Data Storage wählen wir für diesen Teil der Lecture den Arbeitsspeicher. Da dieser selbstverständlich nicht persistent ist, stellt sich hier natürlich die Frage - warum einen nicht-persistenten Speicherort wählen? Die Idee ist hier, dass wir für kleine Demo-Anwendungen einen Data Storage haben, für welchen wir sonst nichts einrichten müssen - keinen SQL Server, keine Dateizugriffe, ... Und nach dem Ende des Demos sind die Daten automatisch wieder weg! Und wenn wir aus dem Demo eine richtige Applikation machen wollen müssen wir nur den Data Storage austauschen
Übersicht zur geplanten Implementierung
Für die Implementierung des Data Storage benötigen wir genau eine Klasse: den
GenericEntityMemoryDataStorage
.
Diese muss dann das Interface IGenericEntityDataStorage
implementieren.
Hier jetzt erst einmal die Definition der Klasse:
Die Klasse selbst speichert die Daten dann in einem mehrstufigen Dictionary. Im Folgenden die Deklaration und wie sie gemeint ist:
Dictionary<string, Dictionary<string, Dictionary<string, GenericEntity>>>
myDataStorage["ApplicationKey"]["FullClassName"]["EntityId"] = myGenericEntity;
Hier jetzt aber noch eine wichtige Ergänzung: wir dürfen in dem gerade vorgestellten Dictionary nicht direkt die zu speichernden Generic Entities als Referenz speichern! Wenn wir Objekte aus einem SQL Server oder aus einer XML- Datei wieder auslesen bekommen wir ja auch nicht die Orginal-Objekte wieder zurück. Aus diesem Grund werden auch nicht die Generic Entities als Referenz gespeichert sondern vielmehr geklonte Instancen davon
Implementierung
Hilfsmethoden
Im nächsten Schritt implementieren wir dann eine Hilfsmethode um ein Generic Entity mithilfe seiner ID-Eigenschaften im Dictionary zu finden sowie eine Hilfsmethode um ein Generic Entity zu klonen. Der Code um ein Generic Entity zu finden ist trivial. Hier suchen wir mit dem "ApplikationKey" als Key, im Ergebnis dann mit dem "FullClassName" als Key und in dessen Ergebnis mit der "EntityId" als Schlüssel. Interessanter ist das Klonen der Objekt-Instanzen
Hier die wesentlichen Code-Segmente um ein Generic Entity zu klonen:
StringWriter writer = new StringWriter(CultureInfo.InvariantCulture);
XmlWriter xmlWriter = XmlWriter.Create(writer);
XmlSerializer serializer = new XmlSerializer(typeof(GenericEntity));
serializer.Serialize(xmlWriter, item);
string xml = writer.ToString();
StringReader reader = new StringReader(xml);
XmlReader xmlReader = XmlReader.Create(reader);
return serializer.Deserialize(xmlReader) as GenericEntity;
Speichern, Finden und Löschen
Beim den eigentlichen Hauptoperationen des Data Storage - dem Speichern, Finden und
Löschen - greifen wir hauptsächlich auf die gerade vorgestellte Hilfsmethoden zu.
Auch hier ist die eigentliche Implementierung trivial - es handelt sich nur um
Operationen auf das Dictionary
Damit wären wir fertig mit der Implementierung des Generic Entity Memory Data Storage. Was noch fehlt ist eine Fehlerbehandlung sowie die Implementierung der restlichen Methoden. Diese erfolgt dann analog den gerade beschriebenen Methoden
Nächster Schritt
Im nächsten Teil der Lecture werden wir einen weiteren Data Storage Typ für Generic Entities implementieren. Dieser wird die Daten dann mittels LINQ to SQL in einer SQL-Datenbank speichern - ein Generic Entity Sql Server Data Storage
... to be continued
- Generische Datenspeicherung mit XML - Teil 5 (SQL Server als Generic Entity Data Storage)
- Generische Datenspeicherung mit XML - Teil 6 (Data Storage)
- Generische Datenspeicherung mit XML - Teil 7 (Data Storage als Web-Service mit WCF)
- Generische Datenspeicherung mit XML - Teil 8 (Zusammenfassung)
Autor: Thomas Gysser | www.advadev.de