Autor Beitrag
curtiss
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 59



BeitragVerfasst: Di 04.09.12 16:23 
Hi und Sry,

der Titel durfte nicht länger sein :(

Kurz auf Deutsch: Ich habe Objekte die an sich der datenhaltung dienen. Jedes objekt soll seinen eigenen Mapper kennen dem sich die objekte selbst übergeben zum speichern, wenn ich am objekt speichern aufrufe. So kann ich in einem rechnungsobjekt zB, beim Artikelobjekt speichern aufrufen, ohne das ich den Mapper kenne.

Folgendes habe ich entwickwickelt:
Das Interface für die Mapper
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  IBasisMapper<T> = interface
    function getObjectByID(PID : Integer): T;
    function update(PObject: T):Boolean;
    function loeschen(PObject: T):Boolean;
    function speichern(PObject: T; PruefenJN : Boolean):Boolean;
  end;


Die Basisklasse für alle Objekte die in die DB sollen etc.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
  TBasisKlasse<T> = class(TObject)
   private
    FMapper                : IBasisMapper<T>;
    procedure SetMapper(const Value: IBasisMapper<T>);
   public
    property Mapper        : IBasisMapper<T>  read FMapper write SetMapper;
  end;


und schlussendlich meine konkrete ableitung
ausblenden Delphi-Quelltext
1:
  TArtikel = class(TBasisKlasse<TArtikel>)					


das führt jedoch zu folgendem Fehler :
[DCC Fataler Fehler] mBKKunde.pas(291): F2084 Interner Fehler: URW2306

Ich denke es liegt daran, das ich versuche eine Klasse von einer generischen klasse abzuleiten, wobei ich die ableitung in die superklasse gebe. dadurch lege ich irgendwie den compiler aufs kreuz :(

Im endeffekt geht es mir auch nur darum, das ich es erzwinge, das nach der erzeugung des objekts, ausschließlich Mapper für diesen Typ zugewiesen werden können. Das <T> in der BasisKlasse ist ja eh nur zum durchschleusen an das Interface...


jemand ne idee?