AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Datenhaltung mit VirtualStringTree und Trennung der Businesslogik
Thema durchsuchen
Ansicht
Themen-Optionen

Datenhaltung mit VirtualStringTree und Trennung der Businesslogik

Ein Thema von jus · begonnen am 24. Mär 2019 · letzter Beitrag vom 2. Mai 2019
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#11

AW: Datenhaltung mit VirtualStringTree und Trennung der Businesslogik

  Alt 26. Mär 2019, 14:37
@DieDolly: Huch, seit wann kann denn der VST generische Daten? Ich nutz den schon soooo lange, dass ich immer noch mit klassischen Records arbeite. Geht auch, aber dein Beispiel würde hier auch vieles sehr vereinfachen. Irgendwie ist dieses Feature komplett an mir vorbei gegangen.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#12

AW: Datenhaltung mit VirtualStringTree und Trennung der Businesslogik

  Alt 26. Mär 2019, 14:41
Die OOP/generischen Ansätze gingen schon mehrmals hier durch die Praxis. Wie man sieht, jetzt schon wieder.
Ich benutze das VST nur noch so und es ist so unglaublich viel einfacher als vorher.

Man braucht keine riesen Helferklassen im Hintergrund. Mein Beispiel ist das was man braucht, um seine Daten getrennt vom VST halten und managen zu können.
Natürlich kommen noch mehr Properties und Helferprozeduren hinzu. Je nachdem was man denn braucht. Aber das ist dann noch immer einfacher als mit den hier erwähnten Helferklassen.
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#13

AW: Datenhaltung mit VirtualStringTree und Trennung der Businesslogik

  Alt 26. Mär 2019, 14:58
Man braucht keine riesen Helferklassen im Hintergrund. Mein Beispiel ist das was man braucht, um seine Daten getrennt vom VST halten und managen zu können.
Natürlich kommen noch mehr Properties und Helferprozeduren hinzu. Je nachdem was man denn braucht. Aber das ist dann noch immer einfacher als mit den hier erwähnten Helferklassen.
Eben eben! Das hier landet letztendlich auch im VST. Da habe ich derzeit einen Record wo ein Pointer drin ist auf eine Objektinstanz. Im Grunde will ja der TE auch genau sowas machen. Wäre mit Generics ungleich einfacher.

Allerdings, wenn man mit dem VST noch nicht viel Erfahrung hat, kann einen das völlig erschlagen, dieses Featuremonster. Egal ob mit Records oder Generics. Man kann auch viele Vorteile zunichte machen, zum Bsp. wenn man iterativ Add() statt ChildCount verwendet. Wobei letzteres wiederum tricky ist bei der Initialisierung, wenn man keine indizierten Listen hat (z.B. TDictionary).
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#14

AW: Datenhaltung mit VirtualStringTree und Trennung der Businesslogik

  Alt 26. Mär 2019, 15:12
Ganz einfach erklärt kann man sich das so vorstellen.

Man stelle sich einen Node im VST vor. Jeder dieser Nodes hat nun als Datengrundlage eine komplette Instanz der TNodeData-Klassendaten.
In der Natur vergleichbar mit einer Goldfruchtpalme. Jeder Strang ist ein Node und jeder Node hat eine Klasseninstanz mit allen Properties (die Blätter am Strang).

Ich habe mich damit anfangs auch sehr schwer getan. Und eben deswegen habe ich dann auch erst Add() und sowas benutzt was das Ziel Daten von GUI trennen natürlich verfehlte.
Irgendwann habe ich mich hingesetzt und einfach Code aus der Praxis abgeschrieben. Der Lerneffekt kommt dann irgendwann von alleine, wenn man mal selber eine listenbasierte Datenhaltung benötigt.
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#15

AW: Datenhaltung mit VirtualStringTree und Trennung der Businesslogik

  Alt 26. Mär 2019, 15:26
Wobei man der Versuchung widerstehen muss, seinen Datenobjekten in irgendeiner Form einen PVirtualNode als Property zu verpassen. Das geht schnell, dass man dann wieder versucht die Visualisierung aus den Datenobjekten heraus zu steuern.

Ich nutze den VST jedenfalls bevorzugt als Grid. Da gibt es IMHO nichts effizienteres. Schon gar nicht solche Schwergewichte wie z.B. DevExpress. Wenn man die Daten ohnehin schon irgendwo im Speicher rumliegen hat, braucht man die nicht noch drölfzig Mal hin und her alloziieren bis man sie mal auf den Bildschirm gepinselt hat.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#16

AW: Datenhaltung mit VirtualStringTree und Trennung der Businesslogik

  Alt 26. Mär 2019, 16:55
Ich werfe mal einfach folgendes zur Diskussion bei:

Meine Geschäftslogik ruft Emails ab. D.h. ich habe eine Liste von Emails.

Wenn ich diese Emails nun zur Anzeige bringen will, kommt die Darstellungsfrage auf.

D.h. möchte ich diese z.B. nach Datum, Betreff oder Thread sortiert/gruppiert sehen.

Abhängig davon würde ich jetzt anfangen meinen VST mit Knoten und Unterknoten zu erstellen. Die Knotendaten selbst sind aber nur ein Zeiger auf das Objekt in meiner Liste.

Objekte verlinken hatte ich u.a. 2007 im Stammtisch #2 gezeigt:
https://www.delphipraxis.net/712774-post4.html
  Mit Zitat antworten Zitat
Aviator

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

AW: Datenhaltung mit VirtualStringTree und Trennung der Businesslogik

  Alt 26. Mär 2019, 21:39
@DieDolly: Huch, seit wann kann denn der VST generische Daten? Ich nutz den schon soooo lange, dass ich immer noch mit klassischen Records arbeite. Geht auch, aber dein Beispiel würde hier auch vieles sehr vereinfachen. Irgendwie ist dieses Feature komplett an mir vorbei gegangen.
Also ich würde mal sagen das es das schon seit 4 Jahren gibt. https://github.com/Virtual-TreeView/...c4f91c0a096aeb

Ich selbst benutze die Generics auch kaum bis gar nicht. Ich arbeite nur noch mit Objekt Instanzen in einer TObjectList<T>. Und da noch ein PClass = ^TClass dazu zuschreiben stört mich weniger.
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#18

AW: Datenhaltung mit VirtualStringTree und Trennung der Businesslogik

  Alt 26. Mär 2019, 21:42
Zitat:
Ich selbst benutze die Generics auch kaum bis gar nicht. Ich arbeite nur noch mit Objekt Instanzen in einer TObjectList<T>. Und da noch ein PClass = ^TClass dazu zuschreiben stört mich weniger.
Ist mein Code auf der vorherigen Seite so wie du das schreiben würdest? Bin gerade etwas verwirrt, weil du sagst du benutzt keine Generics.
  Mit Zitat antworten Zitat
Aviator

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

AW: Datenhaltung mit VirtualStringTree und Trennung der Businesslogik

  Alt 26. Mär 2019, 22:26
Zitat:
Ich selbst benutze die Generics auch kaum bis gar nicht. Ich arbeite nur noch mit Objekt Instanzen in einer TObjectList<T>. Und da noch ein PClass = ^TClass dazu zuschreiben stört mich weniger.
Ist mein Code auf der vorherigen Seite so wie du das schreiben würdest? Bin gerade etwas verwirrt, weil du sagst du benutzt keine Generics.
Hmm ja. Das war vielleicht etwas blöd ausgedrückt. Ich meinte, dass ich die generischen Funktionen des VST wie GetNodeData<T> nicht benutze. Ich nutze eigentlich immer die standard Funktionen. Wahrscheinlich auch, weil ich eine Zeit lang kompatibel zu alten Versionen geblieben bin.
  Mit Zitat antworten Zitat
jus

Registriert seit: 22. Jan 2005
344 Beiträge
 
Delphi 2007 Professional
 
#20

AW: Datenhaltung mit VirtualStringTree und Trennung der Businesslogik

  Alt 27. Mär 2019, 15:42
Vielen Dank an die Mitwirkenden, besonders Aviator und DieDolly. Leider habe ich immer noch Delphi 2007 im Einsatz darum gehen keine Generics.
Anbei der Ansatz für Leute, die noch ein altes Delphi wie ich einsetzen. Ich hoffe, dass ich da keinen logischen Fehler drin habe.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Contnrs, StdCtrls, VirtualTrees;

type
  TNodeDataClass = class
  private
    FSpalte1: string;
    FSpalte2: string;
    FSpalte3: Integer;
  public
  property Spalte1: string read FSpalte1 write FSpalte1;
  property Spalte2: string read FSpalte2 write FSpalte2;
  property Spalte3: Integer read FSpalte3 write FSpalte3;
  end;

  PTreeData = ^TTreeData;
  TTreeData = record
    FObject : TObject;
  end;

  TForm1 = class(TForm)
    vst: TVirtualStringTree;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure vstInitNode(Sender: TBaseVirtualTree; ParentNode,
      Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
    procedure vstGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
      Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
  private
    { Private-Deklarationen }
    DataList: TObjectList;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
  Node: PVirtualNode;
begin
  VST.NodeDataSize := SizeOf(TTreeData);
  VST.RootNodeCount := DataList.Count;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
  NodeData: TNodeDataClass;
begin
  DataList := TObjectList.Create;

  for i := 0 to 3 do
  begin
    NodeData := TNodeDataClass.Create;
    NodeData.Spalte1 := IntToStr(i);
    NodeData.Spalte2 := 'Spalte '+IntToStr(i);
    NodeData.Spalte3 := i;
    DataList.Add(NodeData);
  end;
end;

procedure TForm1.vstGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
var
  data: PTreeData;
begin
  data:= Sender.GetNodeData(Node);

  case Column of
    0: CellText := TNodeDataClass(data^.FObject).FSpalte1;
    1: CellText := TNodeDataClass(data^.FObject).FSpalte2;
    2: CellText := IntToStr(TNodeDataClass(data^.FObject).FSpalte3);
  end;
end;

procedure TForm1.vstInitNode(Sender: TBaseVirtualTree; ParentNode,
  Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
var
  data: PTreeData;
begin
  data := Sender.GetNodeData(Node);
  data^.FObject := DataList[Node.Index];
end;

end.
Lg,
jus
Angehängte Dateien
Dateityp: rar VSTObjectList.rar (2,5 KB, 13x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    


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 19:40 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