Im Prinzip ist es ganz einfach
Die Idee mit der Engineliste ist schon ok. Deine Engines lässt du nun jeweils ein Interface implementieren:
Delphi-Quellcode:
type
IStorageEngine = interface
procedure InitCustomer;
procedure StoreInteger(i: Integer);
procedure StoreString(s: string);
function LoadInteger: Integer;
function LoadString: string;
// etc
end;
Zustzlich verpasst du deiner Klasse jeweils eine Methode Store(IStorageEngine) und Load(IStorageEngine), die nichts weiter tun, als InitCustomer aufzurufen - um der Engine zu sagen, dass jetzt Zeugs für die Customer-Klasse ankommt - und dann alle Felder der Klasse in die IStorageEngine zu werfen oder sie wieder von dort zu laden. Damit sind die Engines generisch und du kannst sie für *jede* Klasse verwenden, die Logik zum speichern/laden ist an der selben Stelle wie die Felder und wenn du eine neue Storage Engine brauchst, bastelst du dir einfach eine schnieke Klasse und verpasst ihr das Interface.