AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Wo häufig benötigte Daten speichern
Thema durchsuchen
Ansicht
Themen-Optionen

Wo häufig benötigte Daten speichern

Ein Thema von Aviator · begonnen am 10. Dez 2013 · letzter Beitrag vom 11. Dez 2013
Antwort Antwort
Seite 1 von 2  1 2      
Aviator

Registriert seit: 3. Jun 2010
1.610 Beiträge
 
Delphi 10.3 Rio
 
#1

Wo häufig benötigte Daten speichern

  Alt 10. Dez 2013, 21:35
Hallo Community,

wie im Titel schon minimalistisch "angesprochen", würde ich gerne wissen, wo man generell Daten ablegt, die während dem Programmablauf immer wieder benötigt werden.
Beispielsweise brauche ich den Benutzernamen des Benutzers der gerade am Programm angemeldet ist immer wieder. Zusätzlich noch die Berechtigungen, die der User hat und dann noch die Benutzereinstellungen, die sich der User wie der Name schon sagt, selbst definiert hat.

Meine Frage also nochmal konkretisiert: Wo werden solche Daten sinnvollerweise im Programm (wenn überhaupt dort) "zwischengespeichert", damit ich immer direkten Zugriff darauf habe? Die Daten in einer Datenbank, Ini oder in der Registry zu speichern und immer dann wenn diese gebraucht werden sie von dort zu lesen, braucht m. E. immer sehr viel Zeit. Ist es vielleicht sinnvoll, sich ?globale? Records/Variablen/Properties zu setzen und diese immer wieder abzurufen?

Ich hoffe, dass ich meine Frage verständlich gestellt habe. Sollte es noch weitere Fragen dazu geben, bin ich gerne offen dafür, diese zu beantworten, sofern ich sie beantworten kann.

Schonmal im Voraus ein Danke für dich möglichen Antworten.

PS.: Die Google und DP-Suche hat mich bei diesem Problem leider nicht weitergebracht, da ich sicherlich auch nicht die passenden Begriffe gefunden habe, um danach zu suchen.
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#2

AW: Wo häufig benötigte Daten speichern

  Alt 10. Dez 2013, 21:41
Wie wäre es 'oldfashioned' mit einem Datenmodul. Das war vor 30 Jahren, als die Dinger erfunden wurden, state-of-the-art. Ein Datenmodul ist der zentrale Container für Daten aller Art, damit sie nicht über Parameter hin und her transportiert werden müssen. Heute macht man das mit OOD, aber da muss man sich erst einmal einarbeiten.

Ein TDataModule ist einfacher zu verstehen. Ist praktisch wie die riesige Pinnwand im Büro.
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.610 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Wo häufig benötigte Daten speichern

  Alt 10. Dez 2013, 21:53
Wenn ich es richtig verstanden habe, dann ist OOD ein Pattern, welches ähnlich wie MVVM in WPF arbeitet. Ich habe mich während der Entwicklung einer WPF Anwendung damit beschäftigt, bin jedoch nicht 100%ig daraus schlau geworden, konnte es schlussendlich dann auch nur näherungsweise umsetzen.

Zur Sache mit dem TDataModule. Diese Klasse muss ja auch irgendwo in meinem Programm erzeugt werden, um die Daten dort hinein zu speichern. An welcher Stelle jedoch wird diese Klasse jedoch erzeugt, damit ich auch auf diese von überall Zugriff habe? Oder habe ich dort etwas Grundlegendes falsch verstanden bzw. wie gebt/gibst ihr/du Informationen an eine andere Klasse/Unit weiter, wenn ihr beispielsweise eine neue Form mit Form2.Show sichtbar macht bzw. öffnet? Genau zu diesem Zeitpunkt müssen ja die Daten im anderen "Fenster" verfügbar sein, damit ich damit arbeiten kann.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Wo häufig benötigte Daten speichern

  Alt 10. Dez 2013, 21:56
Für so einen Container würde sich das Singleton-Pattern anbieten.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Wo häufig benötigte Daten speichern

  Alt 10. Dez 2013, 22:04
Das TDataModule ist für mich auch noch ziemlich neu, aber wenn ich es richtig sehe, dann ist es doch ein Quasi-Singleton für das die IDE (wie für Formulare auch) automatisch einen Application.CreateForm(..) -Aufruf in die DPR bastelt. Inklusive globaler Variable für den Zugriff. Standardmäßig. Muss man ja nicht so behalten.

Wenn du kein lazy-loading oder sonstwas noch reinbasteln willst wäre ich doch fürs erste damit zufrieden, in der DPR die Erstellung des TDataModules ganz nach oben zu schieben und gut ist?


PS: Wahrscheinlich ist es schon spät, aber was ist jetzt mit OOD gemeint? Mir fällt nichts ein, allerdings habe ich mit der WPF auch nichts am Hut. Und großer Gott, Google-Bildersuche nach "OOD", GROßER GOTT!

Geändert von Der schöne Günther (10. Dez 2013 um 22:08 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Wo häufig benötigte Daten speichern

  Alt 10. Dez 2013, 22:07
Ganz simpel und einfach
Delphi-Quellcode:
unit Layer_App;

interface

type
  IAppLayer = interface
    [{GUID}]
    // Zugriff auf Pfade, die die Anwendung benutzt
    function Paths : TAppPaths;
    // Der aktuelle User
    function User : TUser;
    // Die Datenzugriffsschicht/-en
    function Data : TDataLayer;
  end;

function AppLayer : IAppLayer;

implementation

type
  TAppLayer = class( TInterfacedObject, IAppLayer )
  public
    function Paths : TAppPaths;
    function User : TUser;
    function Data : TDataLayer;
  end;

var
  _AppLayer : IAppLayer;

function AppLayer : IAppLayer;
begin
  if not Assigned( _AppLayer ) then
    _AppLayer := TAppLayer.Create;
  Result := _AppLayer;
end;

end.
Jetzt nur noch überall die Unit einbinden und fröhlich mit dem AppLayer arbeiten.

Genauso denkbar ist natürlich auch dieses hier
Delphi-Quellcode:
unit Layer_App;

interface

type
  AppLayer = class
  public
    // Zugriff auf Pfade, die die Anwendung benutzt
    class function Paths : TAppPaths;
    // Der aktuelle User
    class function User : TUser;
    // Die Datenzugriffsschicht/-en
    class function Data : TDataLayer;
  end;

implementation

// jo hier noch implementieren

end.
Der Zugriff ist bei beiden Varianten absolut gleich AppLayer.User.* .
Ist dann also Geschmacksache mit der Ausnahme, dass bei generischen Methoden, die Interfaces nicht mitspielen.

Delphi-Quellcode:
IFoo = interface
  procedure DoWith<T>( Value : T ); // geht nicht
end;

TFoo = class
public
  class procedure DoWith<T>( Value : T ); // geht
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (10. Dez 2013 um 22:57 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Wo häufig benötigte Daten speichern

  Alt 10. Dez 2013, 22:13
PS: Wahrscheinlich ist es schon spät, aber was ist jetzt mit OOD gemeint? Mir fällt nichts ein, allerdings habe ich mit der WPF auch nichts am Hut. Und großer Gott, Google-Bildersuche nach "OOD", GROßER GOTT!
Objekt Orientiertes Design
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.610 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Wo häufig benötigte Daten speichern

  Alt 10. Dez 2013, 22:44
Das mit dem Singleton-Pattern klingt ja schonmal ganz gut. Danke für den Hinweis. Mit Interfaces habe ich bisher nur in Verbindung mit einem VirtualTree View zum Editieren von Nodes gearbeitet, sonst jedoch noch nicht. Von daher ist das was Sir Rufo geschrieben hat noch nicht 100% verständlich für mich. Ich muss dazu sagen, dass ich weder in der Schule noch in einem Studium oder in einer Ausbildung das Programmieren gelernt habe. Alles was ich kann, habe ich mir über die Jahre selbst beigebracht. Im Prinzip "Learning By Doing". Ich entwickele zwar des öfteren kleinere oder auch mal größere Anwendungen für die Firma in der ich arbeite, allerdings eben nur mit dem Wissen, das ich habe. Ich bin offen für alle Neuerungen, die mir das Programmieren erleichtern, wenn ich es einmal verstanden habe. Zur Zeit bin ich an einem größeren Projekt, weshalb ich hier um Rat frage, wie man global verfügbare Daten im Programm abspeichert, um immer wieder darauf zuzugreifen.

Die Programmberechtigungen speichere ich zur Zeit während das Programm läuft in einem Set ab, was wirklich sehr gut funktioniert. Gespeichert werden die Rechte dann als Binärzahl in einer Datenbank. Dieses Set könnte ich dann wenn ich es richtig verstanden habe, ebenfalls in diesem DataContainer ablegen. Wenn ich hier falsch liegen sollte, dann korrigier mich bitte jemand.

Vielleicht könnte auch jemand ein kleines Beispiel machen, wie man denn einen TDataContainer aus mehreren Klassen benutzen kann. Mit einem kleinen Beispiel fällt mir das Verstehen immer um einiges leichter, als immer nur theoretisch darüber zu schreiben bzw. nachzudenken.

Danke für die Mühe, wenn sich jemand diese Arbeit für mich macht.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Wo häufig benötigte Daten speichern

  Alt 10. Dez 2013, 23:15
Die Berechtigung ist doch für den User, also merk dir das im User-Bereich AppLayer.User .
Der DataLayer ist für das Speichern und Laden verantwortlich. Dort wird dann auch entschieden, in welchen Topf gespeichert werden muss (welche Datenbank, welche Tabelle oder auch Datei, Registry oder wo auch immer).

Der Anwendung ist es egal woher die Daten kommen und wohin die gehen, der DataLayer muss es richten, das ist sein Job
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Wo häufig benötigte Daten speichern

  Alt 11. Dez 2013, 10:16
Ganz simpel und einfach
Gibt's da irgendwo noch ein paar Beispiele und Erläuterungen zu ?
(nach Möglichkeit ohne irgendwelche Modevokabeln)
Sieht interessant aus!

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz