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)
 - Generische Datenspeicherung mit XML - Teil 4 (Arbeitsspeicher als Generic Entity Data Storage)
 - Generische Datenspeicherung mit XML - Teil 5 (SQL Server als Generic Entity Data Storage)
 
Kurze Rekapitulation was wir machen wollen
                        Auf unserem Weg zu einer Komponente, welche es uns ermöglicht Daten einfach in Form
                        ihrer XML-Serialisierung zu speichern haben wir bisher Folgendes erreicht: Wir können
                        Objekte (welche das Interface IGenericObject implementieren) in Generic
                        Entities konvertieren (und zurück). Diese können wir dann in einer SQL-Datenbank, in einem
                        XML-File oder im Arbeitsspeicher speichern. Jetzt müssen wir die bisher implementierten
                        Funktionen den Benutzern der Komponente nur noch einfach verfügbar machen
                    
Übersicht zur geplanten Implementierung
Wie schon im ersten Teil erwähnt, ist die Idee dabei das Ganze mit Hilfe von Generics zu lösen. Hier nochmal der Code-Ausschnitt, wie er am Ende beim Verwender der Komponente aussehen sollte:
                        
                            MyDataStorage.Save<User>(newUser)
                            User existingUser = MyDataStorage.Find<User>("myUserName")
                        
                    
                        Hierzu definieren wir zunächst einmal ein Interface IDataStorage welches
                        uns erlaubt Objekte typsicher zu speichern, zu lesen oder zu löschen (im oberen Code
                        wäre das Objekt "MyDataStorage" ein IDataStorage):
                    
                        
                    
Der Data Storage bekommt einen "ApplicationKey" zugewiesen - er ist der Speicher für genau eine Applikation. Damit müssen wir diese Angabe nur einmal machen und müssen nicht bei jedem einzelnen Zugriff (z.B. "Save(user)") einen Key übergeben
                        Anschließend müssen wir dann wieder konkrete Data Storages implementieren - für einen SQL
                        Server, eine XML-Datei, ... Allerdings sind alle diese Implementierungen genau gleich: Sie
                        verwenden intern den entsprechenden GenericEntityDataStorage. Des wegen erzeugen
                        wir auch eine abstrakte Basisklasse DataStorageBase in welcher wir die ganze
                        Implementierung einmal machen. Von dieser Klasse leiten wir dann die einzelnen Data Storages
                        ab. Alles was diese Klassen dann noch machen ist, der Basisklasse den zu verwendenden
                        Generic Entity Data Storage zu übergeben. Hier eine Übersicht:
                    
                        
                    
Nochmal zum besseren Verständnis: In einem Generic Entity Data Storage speichern wir Generic Entities, in einem Data Storage speichern wir beliebige Objekte (welche das Interface IGenericObject implementiert haben). Ein Data Storage wandelt die zu speichernden Objekte in Generic Entities um und speichert diese dann in dem ihm zugehörenden Generic Entity Data Storage
Implementierung der Klasse DataStorageBase
Konstruktor
Der Konstruktor bekommt einen Generic Entity Data Storage sowie ein Application Key übergeben. Diese Objekte werden als private Klassen-Properties gespeichert
Speichern, Finden und Löschen
Beim den eigentlichen Hauptoperationen des Data Storage - dem Speichern, Finden und Löschen - greifen wir hauptsächlich auf den Generic Entity Data Storage zu
Hier die wesentlichen Code-Segmente zum Speichern:
                        
                            GenericEntity genericEntity = new GenericEntity(genericObject, ApplicationKey);
                            GenericEntityDataStorage.Save(genericEntity);
                        
                    
... zum Finden:
                        
                            GenericEntity genericEntity = GenericEntityDataStorage.Find(id, ApplicationKey,
                            typeof(T).FullName);
                            if (genericEntity != null)
                            {
                            return (T)genericEntity.CreateGenericObject(typeof(T));
                            }
                            return default(T);
                        
                    
... und zum Löschen:
                        
                            GenericEntityDataStorage.Delete(new GenericEntity(genericObject, ApplicationKey));
                        
                    
                        Die Implementierungen der Kassen XmlFileDataStorage, MemoryDataStorage
                        und SqlServerDataStorage sind einfach. Der XmlFileDataStorage bekommt
                        im Konstruktor einen Dateinamen übergeben - hieraus wird ein GenericEntityXmlFileDataStorage
                        erzeugt, welcher dem Konstruktor der Basisklasse übergeben wird. Bei dem MemoryDataStorage
                        muss nichts übergeben werden, bei dem SqlServerDataStorage ein Connection-String
                    
Nächster Schritt
Damit haben wir unser Hauptziel erreicht - wir haben nun eine einfache Möglichkeit, um Objekte in einer Applikation persistent zu speichern. Hauptsächlich bei der Verwendung einer Sql-Server Datenbank ist der direkte Zugriff aus einer Applikation heraus allerdings nicht der optimale Weg. Aus diesem Grund wollen wir um diese Komponente abzuschließen noch einen Web-Service implementieren, welcher den Zugriff auf den eigentlichen Data Storage kapselt. Implementieren werden wir diesen mit Hilfe der .Net Windows Communication Foundation (WCF)-Technologie
... to be continued
- 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
Keine Kommentare:
Kommentar veröffentlichen