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
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.
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
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?