![]() |
Re: Registrieren von Klassen
Hi Choose,
Zitat:
Entscheident ist, ich werde die Erzeugung der Objekte nur Vereinfachen können, indem ich der Abtrakten Fabrik den entprechenden Parameter für die Erzeugung mitgebe, wie von Dir dargetellt. Ich denke damit habe ich erst einmal zu tun und damit ist mir auch erst einmal geholfen. Solltest Du weitere Ideen, Anregungen oder Bmerkungen jeder Art haben, können wir hier gern weiterposten. Danke Dir! |
Re: Registrieren von Klassen
Hi Barnti, hi Choose :-D
kleine bemerkungen am rande:
Delphi-Quellcode:
Hier benutzt du zum definieren der array-grenzen eine range, die sowieso den gesammten bereich des enum-typs einschliesst. Dies kannst du auch so machen...
TClassIndex = (Ansprechpartner,Auftrag,auftragstatus,benutzer,bereich,beschaedigung,config,
container,dbdesigner4,dokument,foto,hafenplatz,kolli,Kunde, packliste,partie,partiestatus,partiekarte,pending,position,produktbeschreibung, produktgruppe,sql,unterpartie,userconfig,vertrag,zustaendigkeit); TClassArray= array[Ansprechpartner..zustaendigkeit] of String;
Delphi-Quellcode:
...dann müsstest du nicht immer die array-deklaration anpassen. Darüber hinnaus frag ich mich, ob dieses array überhaupt von nöten ist? Denn man kann einen enum-wert auch leicht zu einem string auflösen. zB.:
TClassArray= array[TClassIndex] of String;
Delphi-Quellcode:
Da eine metaklasse ja auch eine primitive fabrik ist, wäre das möglicherweise schon ausreichend. Hab aber dein problem auch nicht ganz kapiert. Für abstraktere lösungen bietet sich natürlich Choosens lösung an, oder eine kombination.
uses typInfo;
... function GetClassByClassIndex(const aClassIndex:TClassIndex):TPDObjectClass; var clsName:strinf; begin clsName := foramt('TPD%s',[getEnumName(TypeInfo(TClassIndex), integer(aClassIndex))]); result := findClass(clsName); end; function CreateObjectByClassIndex(const aClassIndex:TClassIndex):TPDObject; var aClass:TPDObjectClass begin aClass := GetClassByClassIndex(aClassIndex); if assigned(aClass) then result := aClass.create(<standard_params>) else result := nil; end Vielleicht nütz das dir ja was. Und ich frag mich warum du als index ansonsten einen integer benutzt, der ja alles andere als eindeutig sein kann, bzw verrutschen könnte? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz