Announcement

Collapse
No announcement yet.

Datenbanken, Objekte und Vererbung

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datenbanken, Objekte und Vererbung

    Hallo,<br>
    Wie kann ich folgendes Problem am besten lösen? (Meiner Meinung nach wäre ja eine Mehrfachvererbung am besten, die geht aber mit Delphi so nicht.)
    Problembeschreibung (vereinfacht):
    Es handelt sich um eine kaufmännische Software, mit der z.B.: Angebote erstellt
    werden sollen.
    Dazu benötige ich eine Artikeltabelle, eine Texttabelle, eine Vorgangstabelle
    und eine Vorgangszeilentabelle. Ein Angebot besteht aus einem Datensatz in der Vorgangstabelle (AngebotsNr, Datum, Kunde usw.) und mehreren Vorgangszeilen. Die Vorgangszeilentabelle enthält z.B.: das Feld Menge, Position und eine Ref. auf Artikel bzw. Texte. (Texte können sein Zwischensumme, Titel, oder ein beliebiges Memo). In der Artikeltabelle können sowohl Stammdatenartikel, als auch Vorgangszeilenartikel stehen.
    <br>
    Daraus entstand folgendes Objektmodell:
    <br>
    TVorgangszeile = class(TObject)
    TArtikel = class(TVorgangszeile)
    TText = Class(TVorgangszeile)
    TVorgangszeilen = class(TObjectList)
    Items sind vom Typ TVorgangszeile
    <br>
    Wenn nun ein Artikel (aus den Vorgangszeilen) bearbeitet werden soll, ist alles i.O. Ich kann auf die Eigenschaften der Vorgangszeile und des Artikels zugreifen. Soll nun ein Artikel aus den Stammdaten bearbeitet werden, so hab ich immer auch noch die Eigenschaften der Vorgangszeile (overhead,
    Sonderbehandlungen usw.).
    <br>
    Besser wäre (so denke ich):
    <br>
    TVorgangszeile = class(TObject)
    TArtikel = class(TObject)
    TArtikelVorgangszeile = class(TVorgangszeile, TArtikel) //Mehrfachvererbung geht nicht
    <br>
    So könnte ich in den Stammdaten TArtikel verwenden und in den Vorgangszeilen TArtikelVorgangszeilen. Was ist dann aber mit TText und TVorgangszeilen?
    Oder sollte ich in TVorgangszeilen ein Array von TArtikel/TText (oder ein
    gemeinsamer Vorfahr) und ein Array von TVorgangszeile halten?</p>

  • #2
    Hallo!
    Mehrfachvererbung geht, in dem Du Interfaces verwendest statt Objekte. Somit kannst Du Dir Deine Objekte passend zusammenstellen. ABER....
    Wir haben eine fertige Warenwirtschaft und ich sehe nicht die (Deine) Objektbeziehung zwischen Vorganszeile und Artikel?!? Sicherlich verweist die Vorgangszeile auf den jeweiligen Artikel aber wozu den jetzt diese enge Bindung? Die Vorgangszeile enthält z.B. Angaben über Rabatte etc. die sind für den Artikel vollkommen ohne Bedeutung.
    Ich vermute, dass das Ganze mal in einer Datenbank abgelegt werden soll oder?!?
    Wenn man die "Sichtweise" jetzt mal auf die DB legt hast Du doch folgendes:
    DBVorgang
    ID_Vorgang int
    etc.

    DBArtikel
    ID_Artikel int
    Beschriebug varchar(50)
    etc.

    DBVorgangszeile
    ID_Vorgangszeile int
    Artikel_id int : Verweis auf den Artikel
    Vorgang_id int : Verweis auf den Vorgang
    etc.

    Jetzt kannst Du doch bequem Dein Objektmodell ableiten...

    BYE BERN

    Comment


    • #3
      Hallo,
      Ja das ganze soll mal in einer DB abgelegt werden und meine DB-Struktur ist im wesentlichen wie Du sie beschrieben hast. Manchmal sieht man halt den Wald vor lauter Bäumen nicht. Ich wollte halt, das alles einen gemeinsamen Vorfahren hat (um dem Thema OOP und Pattern gerecht zu werden) den die Vorgangszeilenliste nutzen soll. Ich werd es mal wie folgt probieren:
      TVZObjekt = class(TObject)
      TArtikel = class(TVZObjekt)
      TText = class(TVZObjekt)
      TZwischensumme = class(TVZObjekt)

      TVorgangszeile = class(TObject)
      Item : TVZObjekt; //Item kann nun ein Artikel oder Text oder ... sein

      TVorgangszeilen = class()
      Items : TObjectList; //wobei die Items vom Typ TVorgangszeile sind

      Danke nochmals.
      M.Pannie

      Comment

      Working...
      X