opi: Objekte konfigurieren

Hallo zusammen,

wie konfiguriert man am besten Objekte ohne eine Datenbank zu benutzen?

Mein Problem:

(bitte nicht böse sein, wenn ich etwas durcheinander bringe, ich bin kein spezialist in Sachen OOP, arbeite aber daran)

Ich habe eine Vielzahl von Objekten, die von Benutzern eingerichtet, konfiguriert, geändert - wie auch immer - werden können. Ich nehme einfach mal ein Auto als Objektbeispiel.

Nun könnte ich eine simple Konfigurationsdatei erzeugen und alle Objekte darin abspeichern:

[objekt1]
paramter=wert
[objekt2]
parameter=wert

Das Objekt hat aber verschiedene Klassen, wie zum Beispiel Karosserie, Motor, Kofferraum, Fenster etc., womit ich weitere Untersektionen (Subklassen?) erzeugen müsste, was meiner Ansicht nach aber irgendwie unübersichtlich ausschaut und mir irgendwie nicht behagt.

Zunächst dachte ich an soetwas wie eine Verzeichnisstruktur. Jedes Verzeichnis wäre im Sinne einer Ober- oder Unterklasse und Dateien beinhalten die Klassendefinitionen. Ein Beispiel:

Verzeichnis:Audi
   Verzeichnis:A4
      Datei:Karosserie
      Datei:Fenster
      Verzeichnis:Motor
         Datei:12Zyl
         Datei:6Zyl
   Verzeichnis:A8     # übrigens mein Favorit :-)
      Datei:Karosserie
      Datei:Fenster
      Verzeichnis:Motor
         Datei:12Zyl
         Datei:6Zyl
Verzeichnis:BMW

usw....

Als weiteres kam mir in den Sinn bei einer einzigen Konfigurationsdatei zu bleiben mit folgendem Aufbau:

Audi:A4:Karosserie:parameter1=wert1
Audi:A4:Karosserie:parameter2=wert2
Audi:A4:Karosserie:parameter3=wert3
Audi:A4:Motor:6Zyl:parameter1=wert1
Audi:A4:Motor:6Zyl:parameter2=wert2
Audi:A4:Motor:6Zyl:parameter3=wert3
Audi:A4:Motor:12Zyl:parameter1=wert1
Audi:A4:Motor:12Zyl:parameter2=wert2
Audi:A4:Motor:12Zyl:parameter3=wert3
Audi:A8:Karosserie:parameter1=wert1
Audi:A8:Karosserie:parameter2=wert2
Audi:A8:Karosserie:parameter3=wert3
Audi:A8:Motor:6Zyl:parameter1=wert1
Audi:A8:Motor:6Zyl:parameter2=wert2
Audi:A8:Motor:6Zyl:parameter3=wert3
Audi:A8:Motor:12Zyl:parameter1=wert1
Audi:A8:Motor:12Zyl:parameter2=wert2
Audi:A8:Motor:12Zyl:parameter3=wert3
BMW:3er:Karosserie:parameter1=wert1

usw....

Und genau an diesem Punkt bin ich mit meiner Weisheit am Ende - kommt ja schon mal öfter vor. Jedes Beipiel bring Vor- und Nachteile, aber wie macht man soetwas richtig? Gibt es Standards, an die man sich halten sollte und wenn ja, wie schauen die aus? Oder wie habt Ihr das bis jetzt gemacht?

Wäre super, wenn Ihr mir helfen könntet.

Greez,
opi

--
Selfcode: ie:( fl:( br:^ va:) ls:] fo:) rl:( n4:? ss:| de:] ch:? mo:|
  1. Hi,

    Jedes Beipiel bring Vor- und Nachteile, aber wie macht man soetwas richtig?

    es gibt hier kein pauschales "Richtig". Grundsätzlich sollte man immer den Einzelfall betrachten, auch in seinem Kontext, und sich von Best Practices leiten lassen.

    Gibt es Standards, an die man sich halten sollte

    In Deinem Fall sehe ich vor allem strukturierte Daten, was förmlich nach XML schreit. Dies hängt aber von vielen Faktoren ab, wie beispielsweise die Änderungsrate der Daten und die Menge der Datenanalysen.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
  2. Hi,

    dein Objekt Auto könnte z.b. mit einer Save() Methode ausgestattet
    werden, die dann die Inhalte der Klasse in ein bestimmtes Format
    "serialisiert". Dann würde sich eine Load() Methode als Komplementär
    anbieten.

    Wenn deine Klassen wiederum mit weiteren Klassen arbeiten, z.b. Auto
    mit Karosse, Motor ... dann würden auch diese Unterklassen Methoden
    zur Serialisierung ihrer Daten benötigen um so ihre Information an
    ihre Elternklasse hochreichen zu können.

    Jenachdem welche Programmiertechnologie du verwendest bietet diese dir
    evt. schon vorgefertigte Patterns, die du anwenden kannst. Als Beispiel
    seien hier kurz mal Reflection und Xml.Serialization von .Net genannt.
    Mit Reflection bekommst du Informationen über die Elemente (Member,
    Methoden, Konstruktoren etc) deiner Klasse. Xml.Serialization nutzt
    in dem Moment Reflection um die Member als Xml-Nodes mit Werten
    abzuspeichern.

    Dir steht natürlich frei, dies auch selbst neu zu implementieren.
    Wie Cheatah schon bemerkte, solltest du dich dann an "Best Practices"
    orientieren.

    Grüße,
    Frank