AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Datenmodell automatisch erzeugen

Ein Thema von FAM · begonnen am 9. Feb 2015 · letzter Beitrag vom 10. Feb 2015
Antwort Antwort
FAM

Registriert seit: 22. Dez 2014
47 Beiträge
 
Delphi XE Enterprise
 
#1

Datenmodell automatisch erzeugen

  Alt 9. Feb 2015, 06:31
Delphi-Version: 5
Hallo Zusammen,

ich bin gerade am überlegen wie ich eine automatische Implementierung eines Datenmodelles, welches korrespondierend mit der auktuellen GUI ist, zu realisieren.

Wenn ich ein Button A in die GUI-Form einfüge soll im Datenmodell eine entsprechende Aktualisierung erfolgen. Ich möchte also immer ein "Live-Abbild" der komplette GUI(-Komponenten-Referenz) haben.

Gibt es dafür irgendwelche (allgemeinen) Ansätze?
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.010 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Datenmodell automatisch erzeugen

  Alt 9. Feb 2015, 06:45
Was wäre im konkreten Beispiel im Datenmodell nach dem Hinzufügen des Buttons anschliessend denn als neues Objekt vorhanden?
Angenommen, es gäbe zu Anfang nur ein 'leeres' Datenmodell. Nun füge ich einen Button der GUI hinzu. Wie sieht das Datenmodell danach aus?
Michael Justin
  Mit Zitat antworten Zitat
FAM

Registriert seit: 22. Dez 2014
47 Beiträge
 
Delphi XE Enterprise
 
#3

AW: Datenmodell automatisch erzeugen

  Alt 9. Feb 2015, 07:24
Was wäre im konkreten Beispiel im Datenmodell nach dem Hinzufügen des Buttons anschliessend denn als neues Objekt vorhanden?
Angenommen, es gäbe zu Anfang nur ein 'leeres' Datenmodell. Nun füge ich einen Button der GUI hinzu. Wie sieht das Datenmodell danach aus?
Datenmodel vor der GUI-Änderung:

Datamodel.Reference.count = 0;

Textfeld wird hinzugefügt:
GUI.Text1FooBar.Name = Text1FooBar

Datenmodel nach der GUI-Änderung:
Datamodel.Data.Text1FooBarData= '';

Datamodel.Reference.count = 1;
Datamodel.Reference['Text1FooBar']['gui'] = @Text1FooBar
Datamodel.Reference['Text1FooBar']['data'] = Datamodel.Data.Text1FooBarData


wenn sich dann im Datenmodel was für Text1FooBarData etwas ändert kann ich das korrespondierende GUI-Element Text1FooBar einfach aktualisieren (BindingRefresher).

Ich möchte einfach eine "GUI-DataModel-Matching" Tabelle automatisch pflegen lassen
  Mit Zitat antworten Zitat
FAM

Registriert seit: 22. Dez 2014
47 Beiträge
 
Delphi XE Enterprise
 
#4

AW: Datenmodell automatisch erzeugen

  Alt 9. Feb 2015, 09:10
Habe es jetzt so implementiert.


Delphi-Quellcode:
  

type
  TBinding = packed record
    GUI: TObject;
    DateModelValuePtr: Pointer;
  end;

private
    Bindings: array of TBinding;


implementation

AddBinding(EditContentbarStartMarker, @FViewModel.StartMarker);
AddBinding(EditContentbarEndMarker, @FViewModel.EndMarker);

Add Binding

Delphi-Quellcode:
procedure TForm1.AddBinding(GUIComponent: TObject; DateModelValuePtr: Pointer);
var
  NewBinding: TBinding;

begin

  // Binding Element erstellen
  NewBinding.GUI := GUIComponent;
  NewBinding.DateModelValuePtr := DateModelValuePtr;

  // Neues (globales) Binding erstellen
  SetLength(Bindings, Length(Bindings) + 1);
  Bindings[ High(Bindings)] := NewBinding;

end;
Refresh Binding
Delphi-Quellcode:
procedure TForm1.BindingRefresh;

var
  i: Integer;
  Ptr: ^Integer;
begin

  for i := 0 to High(Bindings) do
  begin
    Ptr := Bindings[i].DateModelValuePtr;
    (Bindings[i].GUI as TEdit).Text := IntToStr(Ptr^);
  end;
end;
entspricht zwar nicht ganz der oben genannten Struktur, aber funktionert.

Geändert von FAM ( 9. Feb 2015 um 09:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.356 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Datenmodell automatisch erzeugen

  Alt 9. Feb 2015, 11:43
Die Zielsetzung (soweit ich sie verstehe suchst Du eine einfache Bindung zwischen Daten und GUI) kann ich gut nachvollziehen.
Die Realisierung weniger.

Was Du in Deinem array verwaltest scheint mir etwas kritisch zu sein.
In jedem Fall musst Du dafür sorgen, dass das stabil bleibt - auch wenn Controls irgendwann freigegeben werden.

Die LiveBindings haben (oder hatten jedenfalls seinerzeit) damit erhebliche Probleme, so dass andauernd die IDE abgeschmiert ist.
Ich finde daher eine losere Kopplung sinnvoller.


Den Ansatz, das Datenmodell nach der GUI zu gestalten, finde ich auch zweifelhaft. Vom Prinzip könntest Du dann auch das Formular nach TEdit´s durchsuchen und deren Text-Eigenschaften als Datenfeld ansehen.


Besser wäre m.E. einen Klassenexperten zu nutzen, der Dir auf möglichst komfortable Weise Businessklassen und Objekte erzeugt (incl. Speichern und Laden von Daten) und dann einen Weg zu suchen, wie Du die Daten einfach und stabil an die GUI binden kannst.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli ( 9. Feb 2015 um 13:55 Uhr)
  Mit Zitat antworten Zitat
FAM

Registriert seit: 22. Dez 2014
47 Beiträge
 
Delphi XE Enterprise
 
#6

AW: Datenmodell automatisch erzeugen

  Alt 9. Feb 2015, 14:44
Besser wäre m.E. einen Klassenexperten zu nutzen, der Dir auf möglichst komfortable Weise Businessklassen und Objekte erzeugt (incl. Speichern und Laden von Daten) und dann einen Weg zu suchen, wie Du die Daten einfach und stabil an die GUI binden kannst.

danke für deine Antwort.
kannst du ein wenig mehr über den Klassenexperten sagen?!
  Mit Zitat antworten Zitat
hanvas

Registriert seit: 28. Okt 2010
171 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Datenmodell automatisch erzeugen

  Alt 9. Feb 2015, 16:54
Habe es jetzt so implementiert.


Delphi-Quellcode:
  

type
  TBinding = packed record
    GUI: TObject;
    DateModelValuePtr: Pointer;
  end;

private
    Bindings: array of TBinding;


implementation

AddBinding(EditContentbarStartMarker, @FViewModel.StartMarker);
AddBinding(EditContentbarEndMarker, @FViewModel.EndMarker);
Probiere es doch mal mit einer Implementierung des MGM Pattern (http://www.atug.com/andypatterns/mgm.htm). TiOPF ( http://tiopf.sourceforge.net/) verwendet/implementiert das ganze in Delphi / FPC.


hth Ha-Jö
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 16:07 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