![]() |
AW: [XE5]: Nutzung des Datenmoduls
Und wenn man den GlobalStore mit ein wenig Logik versieht, dann wird beim Setzen von
Delphi-Quellcode:
auch schon passend dazu
Global.UserId
Delphi-Quellcode:
und
Global.UserRoleID
Delphi-Quellcode:
gesetzt.
Global.Username
Oder das passiert auch beim Setzen des Usernamen (UserID, UserRoleID). UserRoleID könnte zudem auch ReadOnly sein :) Oder alle Felder sind ReadOnly und es gibt noch eine Login-Methode die dann diese Felder setzt. Oder ... |
AW: [XE5]: Nutzung des Datenmoduls
Folgende zwei Codefragmente sind äquivalent:
Delphi-Quellcode:
Das ist im Prinzip nix anderes wie 3 globale Variablen
type
Global = class private class var FUserID : Integer; class var FUserRoleID : Integer; class var FUsername : string; class procedure SetUserID( const Value : Integer ); class procedure SetUsername( const Value : string ); static; class procedure SetUserRoleID( const Value : Integer ); static; public class property UserID : Integer read FUserID write SetUserID; class property UserRoleID : Integer read FUserRoleID write SetUserRoleID; class property Username : string read FUsername write SetUsername; end;
Delphi-Quellcode:
Ob man jetzt noch ein Interface darüberlegt oder den Username automatisch mit der UserID setzt ändert nichts daran dass hier ein "Sack voller globaler Variablen" vorliegt.
var
UserID : Integer; UserRoleID : Integer; Username : string; Ich habe dazu ein ![]() |
AW: [XE5]: Nutzung des Datenmoduls
Der Vorteil es nicht nur als viele globale Variablen zu machen, ist der, daß man sich später problemlos da überall reinhängen kann, ohne daß am Aufrufenden Code etwas geändert werden muß.
Das reicht schon vollkommen.
Delphi-Quellcode:
Getter und Setter läßt sich nachträglich einfügen und schon kann man Code für eine Werte-Kontrolle der Felder integrieren, oder ein Logging oder oder oder...
type
Global = class abstract private class var FUserID : Integer; FUserRoleID : Integer; FUsername : string; public class property UserID : Integer read FUserID write FUserID; class property UserRoleID : Integer read FUserRoleID write FUserRoleID; class property Username : string read FUsername write FUsername; end; Und viel mehr Aufwand ist es auch nicht.
Delphi-Quellcode:
Nun nur noch Strg+Alt+C (Klassenvervollständigung) und fertig isses.
type
Global = class abstract class property UserID : Integer; class property UserRoleID : Integer; class property Username : string; end; OK, abgesehn von dem BUG, welcher hier grade auftritt. Denn so sollte das Ergebnis der Klassenvervollständigung wirklich nicht aussehn.
Delphi-Quellcode:
Global = class abstract
class property UserID : Integer read FUserID write SetUserID; class property UserRoleID : Integer read FUserRoleID write SetUserRoleID; class property Username : string read FUsername write SetUsername; private FUserID: Integer; private class var FUserRoleID: Integer; private class var FUsername: string; private private private procedure SetUserID(const Value: Integer); class procedure SetUsername(const Value: string); static; class procedure SetUserRoleID(const Value: Integer); static; end; |
AW: [XE5]: Nutzung des Datenmoduls
Zitat:
In einer Klasse/Interface werden die aber kontrollierbar. |
AW: [XE5]: Nutzung des Datenmoduls
Wieso kann man eigentlich keine Class Const deklarieren, und auch kein Class Type? Ich hab diese geniale Idee mit den Klassenvariablen nämlich gleich mal ausprobiert, um nicht immer alles im Datenmodul deklarieren zu müssen.
|
AW: [XE5]: Nutzung des Datenmoduls
Zitat:
Die Konstanten sind immer da und erreichbar und die Types auch |
AW: [XE5]: Nutzung des Datenmoduls
Hab Dank, Sir Rufo, genau das hatte ich vermutet, denn es hat bei Const und Type auch ohne vorangestelltes Class funktioniert :thumb:
|
AW: [XE5]: Nutzung des Datenmoduls
Es gibt
Delphi-Quellcode:
, wo der Compiler und auch zur Laufzeit eine Exception werfen sollte, wenn man versucht davon eine Instanz zu createn. (die weitere Vererbung könnte man auch noch abschalten)
class abstract
Und du kannst es auch gerne als Record deklarieren. In die Klasse rein, kann man auch noch abhängige/private Typen und Konstanten aufnehmen, welche dann nicht im Kontext der Unit "öffentlich" rumschwirren. |
AW: [XE5]: Nutzung des Datenmoduls
Hallo,
erstmal Entschuldigung das ich erst jetzt antworte. Ich habe gerade versucht das jetzt umzusetzen - leider ohne Erfolg. Ich habe eine neue Unit angelegt und so gefüllt:
Delphi-Quellcode:
Wenn das Projekt erstellen will bekomme ich diese Fehlermeldungen:
unit datenmodul;
interface type Global = class private class var FSymboltyp : Integer; class procedure SetSymboltyp (const Value : Integer); public class property Symboltyp : Integer read FSymboltyp write SetSymboltyp; end; implementation procedure Global.SetSymboltyp(const Value : Integer); begin FSymboltyp:=Value; end; end. Zitat:
Wenn es sich um eine Tippfehler handelt, finde ich ihn nicht. Könnt Ihr noch mal schauen? Gruß Heiko |
AW: [XE5]: Nutzung des Datenmoduls
Delphi-Quellcode:
Es ist ja als Klassenmethode deklariert, deshalb muss es auch so implementiert werden.
class procedure Global.SetSymboltyp(const Value : Integer);
begin FSymboltyp:=Value; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:16 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 by Thomas Breitkreuz