![]() |
Delphi-Version: 5
Datenmodell automatisch erzeugen
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? |
AW: Datenmodell automatisch erzeugen
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? |
AW: Datenmodell automatisch erzeugen
Zitat:
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 |
AW: Datenmodell automatisch erzeugen
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:
Refresh Binding
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;
Delphi-Quellcode:
entspricht zwar nicht ganz der oben genannten Struktur, aber funktionert.
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; |
AW: Datenmodell automatisch erzeugen
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. |
AW: Datenmodell automatisch erzeugen
Zitat:
danke für deine Antwort. kannst du ein wenig mehr über den Klassenexperten sagen?! |
AW: Datenmodell automatisch erzeugen
Ich vermute er meint grafische Tools für ORM
|
AW: Datenmodell automatisch erzeugen
Genau.
Da haben sich offenbar viele eine Lösung gebaut (ich ja auch mal). Man gibt dann z.B. einfach die Klassenstruktur an: Person - Firstname: String - LastName: String Car - Color: TColor - Nr: String Auf Knopfdruck werden dann die Units mit den Klassen erzeugt, die man dann in Delphi kompilieren kann. Der ganze Schreibkram der immer gleichen Funktionalitäten (speichern und laden von Daten und Datenaustausch mit anderen Ebenen) wird dann halt automatisch fertiggestellt. Ergänzen muss man dann nur noch die Businesslogik. Jedenfalls würde man mit dem Ansatz wirklich das Model definieren (als wenn man die Klassen von Hand schreiben würde, nur dass halt vieles automatisiert wird). Die GUI kann (und muss) dann unabhängig aufgebaut werden. Natürlich wäre es hilfreich, wenn man dann ein brauchbares Databinding zur Verfügung hätte, das einem wieder Arbeit abnimmt. Ein MVVM wäre eine weitere Option. Von einer gebastelten GUI ein Datenmodel ableiten zu wollen, halte ich für keinen guten Ansatz. Eigentlich sind das wesentlich ja die Daten und BL. Die GUI ist (lediglich) ein Hilfsmittel, damit der User irgendwie einen Zugang erhalten kann. |
AW: Datenmodell automatisch erzeugen
Zitat:
![]() ![]() hth Ha-Jö |
AW: Datenmodell automatisch erzeugen
Zitat:
oder ? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:37 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