Das Programm ist eine Adress-Verwaltung für div. Kunden. Mit Fax, Memo, etc.. Ziel ist die Erweiterbarkeit des ganzen Projektes, je nach Kundenwunsch. Als ich noch mit Delphi programmiert habe, habe ich zwar objektorientiert programmiert, aber nicht OBJEKTorientiert programmiert. Durch PHP habe ich eigentlich erst angefangen mit DesignPatterns zu arbeiten und habe das Konzept der OOP erst so richtig angefangen zu durchschauen. Nun versuche ich davon so viel wie möglich in die Praxis umzusetzen.
Die XML ist die Adress-Datenbank. Unter dem Root-Element sitzen die Kategorien, d. h. die Gruppen, in denen die Adressen eingeteilt werden können. In jeder Kategorie sind die Einträge, welche wiederum in einzelne Gruppen von Daten unterteilt sind.
Ist zwar ein bissl lang, aber verdeutlicht die abzubildenden Daten.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64:
| <?xml version="1.0" encoding="ISO-8859-1"?> <AdDresser version="1.0" created="2009-02-11 13:00:00" changed="2009-02-11 13:00:00"> <database name="Privat" customize="no" nextIndex="2"> <entry index="1" created="2009-02-11 13:00:00" changed="2009-02-11 13:00:00"> <general> <salutation>Herr</salutation> <nameFore>Jon</nameFore> <nameLast>Doe</nameLast> </general> <sector>IT, </sector> <company> <item>Teletext AG</item> <item></item> </company> <contactPerson>Herr Jon Doe</contactPerson> <addressData> <address>Parkstraße 7</address> <zipCode>00000</zipCode> <city>Dresden</city> <state>Germany</state> <media> <phone> <item></item> <item></item> </phone> <telefax> <item></item> <item></item> </telefax> <mobile> <item>+49 (0)351 1234567</item> <item></item> </mobile> <email> <item>Jon.Doe@teletext.de</item> <item></item> </email> <web> <item>teletext.com</item> <item></item> </web> </media> <notes></notes> <correspondence> <letters> <item name="Erster" date="2009-02-11 13:00:00">20090211130000.rtf</item> </letters> <telefaxes> </telefaxes> <memos> </memos> <emptySites> </emptySites> </correspondence> </addressData> </entry> </database> <database name="Kunden" customize="no" nextIndex="1"> </database> <database name="Lieferanten" customize="no" nextIndex="1"> </database> <database name="" customize="yes" nextIndex="1"> </database> </AdDresser> |
Diese Struktur will ich nun als Objektmodell verfügbar machen. Dann kommen noch ein paar Methoden für die Interaktion dazu und ... ja. Mir kam eben erst der Gedanke, die Abbildung sukzessive ablaufen zu lassen.
Ich erstelle die DatabaseXml-Instanz, übergebe Ihr den Pfad auf die XML. Diese Instanz liest nur die Attribute des Root-Elements <AdDresser ...>.
Anschließend wird die CategoryCollection erzeugt und dem Konstruktor (schematisch) "Xml.RootElement.childNodes" übergeben. Und aus diesen childNodes werden dann die einzelnen Category-Instanzen in der Liste erzeugt. Diesen Category-Instanzen wird dem Konstruktor wiederum "childNodes[I].childNodes" übergeben, um in der Category-Instanz wieder eine EntryCollection zu erzeugen. Und da das gleiche Spiel wie bei den Kategorien. Bis ich dann im letzten Zipfel der XML angekommen bin. So kann ich dann in Zukunft ohne weiteres neue Elemente in der Datenstruktur aufnehmen und muss nur jeweils eine Klasse dafür implementieren und diese an entsprechender Stelle im Objektmodell "einhängen".
Jetzt verstehe ich erstmals den Gedanken der objektrelationalen Abbildung, ob nun in Datenbanken oder in einer XML ist ja egal.
Dieses Konzept sollte doch jetzt soweit funktionieren, oder? Ist es überhaupt klar, worauf ich hinaus will?
P.S.: Der Gedanke ist, dass genau diese Objektstruktur auch soweit erweitert / verwendet werden kann, dass sie z. B. in einer MySQL-Datenbank abgespeichert werden kann.