Objektorientierung + Datenbank - Katalog

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Objektorientierung + Datenbank - Katalog

    Ich möchte einen Produktkatalog erstellen, es gibt verschiedene Untergruppen von Produkten, z.B. Autos - Sportwagen, Familienwagen

    Alle Autos haben gemeinsame Attribute und die Untergruppen zusätzlich eigene Attribute. Deshalb würde ich aus OOP-Sicht eigentlich zur Vererbung greifen und eine abstrakte Oberklasse erstellen.

    Nun sollten im Produktkatalog aber auch alle Produkte angezeigt werden können, im Beispiel sowohl Sportwagen als auch Familienwagen mit all deren Attributen. Ich weiß, welche Attribute die jeweilige Gruppe hat und die Gesamtheit der möglichen Attribute wird sich im Laufe der Zeit nur geringfügig ändern, es sind aber relativ viele (über 50) und bei einer einzelnen Klasse ungefähr zwischen 5 und 15.
    Die Daten sollen aus einer relationalen DB (MySQL) gelesen werden.

    Nun bin ich mir über den Klassenaufbau unklar, ich könnte eine einzelne Klasse Produkt erstellen und keine Vererbungshierarchie aufbauen und aus dieser Klasse einfach alle Daten aus der DB holen, erscheint mir aber nicht gut.

    Wenn ich aber eine Klassenstruktur verwende, dann sehe ich keine Möglichkeit mehr, alle Artikel auszugeben, das ist das größte Problem bei dem Ansatz.
    Ich denke aber, dass es dafür eine Lösung gibt, nachdem ich nun mehrere Tage mich mit dem Thema beschäftigt habe, habe ich vermutlich den Überblick verloren, kann mir jemand eine Vorgehensweise empfehlen, über Links o.Ä. freue ich mich.

    Weiteres Problem ist der Aufbau der DB, ich dachte anfangs an ein Entitiy-Attribute-Value-Pattern, aber bei der relativ großen Anzahl an Attributen einer einzelnen Klasse möchte ich darauf verzichten.
    Habe mich bereits mit Single / Class / Concrete Table Inheritance beschäftig, Class wäre u.U. geeignet, aber müsste erst einmal das OOP-Problem lösen, vielleicht benötige ich noch eine Katalogklasse?

    Vielen Dank!
    Zuletzt geändert von einermeiner; 26.07.2012, 13:34.

  • #2
    Wenn ich aber eine Klassenstruktur verwende, dann sehe ich keine Möglichkeit mehr, alle Artikel auszugeben, das ist das größte Problem bei dem Ansatz.
    Hmm, das sehe ich generell nicht so. Wenn Sowohl Auto als auch Buch von Produkt erben, dann sind also auch beide ein Proukt. Das heißt, du könntest problemlos alle als Produkt instanzieren und so in deinem Produktkatalog ausgeben.

    Die Frage ist aber, brauchst du überhaupt die Spezialisierung als "Auto"? Du willst ja gar nicht die Autos selber abbilden (die haben Funktionen wie motorStarten(), beschleunigen(), ...) sondern du willst ja nur die Produkte mit ihren Eigenschaften auflisten. Ich könnte mir also gut vorstellen, dass du im Rahmen deines Produktkatalos gar keine Vererbungen benötigst.

    PS: Die Katalogklasse könntest du durchaus verwenden, aber das ist denke ich unabhängig vom Rest der Fragestellung, also isoliert zu betrachten.

    Kommentar


    • #3
      Danke für die 1. Antwort!

      Das ist auch meine Überlegung, eigentlich benötige ich gar keine Vererbung, weil sich in den Unterklassen nur die Attribute ändern würden.
      1. Aber soll ich nun alle möglichen Attribute der Basisklasse zuweisen oder es sehr abstrakt handhaben und ein Attribut "Eigenschaften" hinzufügen und die Daten in einem Array ablegen (Attributname=>Wert, evtl. gruppieren), wie sähe es aus, wenn ich zusätzlich nun noch Computer verkaufen wollte?

      2. Und in der Datenbank würde ich ungern die über 50 Attribute in einer Tabelle speichern, vielleicht benötige ich so etwas wie Class Table Inheritance für die DB, aber ohne Klassen im Code?
      Bei meinem Anliegen muss ich das mappen zwischen DB / Objekten selbst übernehmen oder kann man so etwas auch komfortabel mit ORM-Tools erledigen?

      Kommentar

      Lädt...
      X