Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   ssFrameWork (StahliSoft - FrameWork) (https://www.delphipraxis.net/173360-ssframework-stahlisoft-framework.html)

stahli 20. Feb 2013 00:03

ssFrameWork (StahliSoft - FrameWork)
 
Liste der Anhänge anzeigen (Anzahl: 2)
Die Erfahrungen mit den (Visual) Live Bindings sind sehr durchwachsen.
Auch wenn diese stabil arbeiten würden, wäre das Konzept m.E. nicht wirklich sinnvoll.

Auf der Suche nach einer Alternative habe ich mich mit einem eigenen Lösungsansatz beschäftigt.
Heraus gekommen ist mein "ssFrameWork" (jedenfalls erste Ansätze dafür).


Da das Framework schon recht umfangreich ist, will ich dieses hier zunächst mit zwei kurzen Videos vorstellen:
Demoprojekt: http://youtu.be/MwQooRn67tI
Funktionsweise: http://youtu.be/OpHenJ1EPDE
Das Grundprinzip wird hoffentlich ausreichend verdeutlicht.
(Bitte erwartet keine medialen Kunstwerke, ich möchte hier nur gern die Funktionsweise vorstellen.)


Das DataBinding funktioniert anders als bei den LiveBindings, aber es funktioniert halt. ;-)
Der wesentliche Unterschied ist, dass die GUI-Controls sich aktiv ihre Daten von dem Frameworkmanager abrufen und andererseits die GUI-Controls dynamisch vom Framework abhängig von der Datenlage erstellt werden können.


Im Moment habe ich das Framework für FireMonkey aufgebaut (ich hoffe immer noch, dass FireMonkey mit der Zeit verbessert wird und allgemeine Akzeptanz und Verwendung findet) aber es wäre ohne Probleme auch für die VCL realisierbar.
Natürlich sind noch viele Erweiterungen und Optimierungen geplant und erforderlich (insbesondere was die Datenbankfunktionen betrifft), aber ich würde gern schon einmal Eure Einschätzung des Konzeptes erfahren...

Das Grid, die ListBox und den Navigator habe ich nicht von den originalen FMX-Controls abgeleitet, sondern diese komplett neu aufgebaut.
Zum Einen finde ich die originalen FMX-Controls unnötig kompliziert und zum Anderen habe ich so die Möglichkeit, die Controls optimal auf das Framework anzupassen.


Ich bin für jedes Feedback dankbar und hoffe natürlich auf Euer Interesse ...

Stevie 20. Feb 2013 07:01

AW: ssFrameWork (StahliSoft - FrameWork)
 
Sieht ganz brauchbar aus, ... aber das tun die LiveBindings und Firemonkey in den Embarcadero Präsentationen auch.

Feedback wird also imho erst für dich brauchbar, wenn du mal andere damit rumspielen lässt, die das nicht entwickelt haben (spreche aus eigener Erfahrung).
Dann zeigt sich nämlich wie intuitiv und einsetzbar das ganze ist.

Was mich etwas stört ist, dass das Framework extra Controls braucht. Gerade bei Firemonkey (und in der VCL ab XE2) kann man das wunderbar über den Observer regeln, ohne z.B. Interceptor Klassen zu bauen, wie ich in DSharp gemacht habe.

Union 20. Feb 2013 07:06

AW: ssFrameWork (StahliSoft - FrameWork)
 
Ja das sieht gut aus. Ich habe dazu aber die eine oder andere Frage:

* Wann kommt die VCL-Version?
* Welche Controls hast Du bereits umgesetzt?
* Wie kann man NICHT von Dir bereits implementierte Controls an das Framework binden?

Lemmy 20. Feb 2013 07:41

AW: ssFrameWork (StahliSoft - FrameWork)
 
Hi,

da ich ne bescheidene Internetanbindung habe (deshalb ist Video ganz schlecht), würden mich ein paar Sourcen interessieren, insbesondere wie man Controls anbindet (Standardcontrols).

stahli 20. Feb 2013 11:50

AW: ssFrameWork (StahliSoft - FrameWork)
 
Danke schon mal für das Feedback.

Die Quellen stelle ich ab heute Abend gern zum Testen zur Verfügung. :-)
Das Problem ist, dass ich zum Release 1.0 momentan vielleicht beim Stand von 20% bin.

Probleme gibt es im Moment definitiv beim Überschreiben der Datenbank, da ich damit noch wenig Erfahrungen habe. Testweise nutze ich FB unter IBX, das sollte man aber leicht austauschen können.

Ansonsten will ich noch einen Komponenteneditor erstellen, in dem ich die Struktur der BL-Klassen definieren kann. Der Experte soll dann (abhängig von der gewählten Datenhaltung (ObjektListen, ORM, DataSet)) die Klassen für die Datenverwaltung erstellen. Diese Klassen sollen dann durch den Experten jederzeit aktualisiert werden können.
Der Programmierer kann von den automatisch zu generierenden Datenklassen BL-Klassen ableiten, die die Geschäftslogik definieren.
Soweit meine Vorstellungen dazu. Aber das muss halt noch realisiert werden.

Wer dennoch Interesse am aktuellen Stand hat, einfach mal per pm schreiben...


Derzeit habe ich nur das Edit und die Checkbox angepasst (Grid, Listbox und Navigator neu zu entwickeln war mir dann wichtiger). Die anderen Controls sollten aber auch leicht anpassbar sein.
Ebenso die VCL-Controls. Wenn da Nachfrage besteht kann ich das mal mit angehen (ab Delphi 2010 sollte das machbar sein).


Dass man spezielle Controls nutzen muss (ähnlich den DBControls unter VCL) halte ich nicht unbedingt für nachteilig. Ich hatte auch schon Versuche erfolgreich durchgeführt, einem "normalen" Control (z.B. existierenden Edit) einfach nachträglich einen Controller anzuhängen und das Binding dann so zu realisieren (mit Hilfe eines SubClassing - oder wie heißt das wenn eine Klasse dynamisch zur Laufzeit Compiletime überschrieben wird?).
Ich fand es dann aber besser und übersichtlicher, spezialisierte Controls einzuführen. Aber da kann man ja nochmal drüber nachdenken, wenn gewünscht.
(Aber die FMX-Controls sind ja letztlich auch schon spezialisierte Controls, um mit dem LiveBinding umzugehen. Irgendwie müssen die Controls ja ihr Funktionalität auf das Framwork anpassen.)


Zumindest freut mich sehr, dass Euch der Grundgedanke offenbar gefällt.

bernhard_LA 20. Feb 2013 15:19

AW: ssFrameWork (StahliSoft - FrameWork)
 
wie wäre es mit einem Projekt auf Source forge und mit SVN , dann können wir immer den aktuellen Stand runterladen bzw. auch mal selbst was hinzufügen ?

Namenloser 20. Feb 2013 16:09

AW: ssFrameWork (StahliSoft - FrameWork)
 
Zitat:

Zitat von bernhard_LA (Beitrag 1204485)
wie wäre es mit einem Projekt auf Source forge und mit SVN , dann können wir immer den aktuellen Stand runterladen bzw. auch mal selbst was hinzufügen ?

Da wir 2013 haben vielleicht lieber Github und Git :wink:

Ich hab mir eins von den Videos auch angesehen (ebenfalls beschränktes Internet) und es macht zumindest einen guten Eindruck, ich kenne allerdings die LiveBindings nicht und habe daher keinen Vergleich. Testen kann ich es mangels aktuellem Delphi nicht... die Sourcen würden mich eventuell trotzdem interessieren, aber nur aus Neugier ;)

(Oder schon mal drüber nachgedacht, das ganze kommerziell zu entwickeln? Wenn – nach deiner Aussage – nicht mal Embarcadero selbst es hinbekommt, könnte es sich ja vielleicht lohnen...)

stahli 20. Feb 2013 22:24

AW: ssFrameWork (StahliSoft - FrameWork)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also ich würde das sehr gern kommerziell entwickeln...
(Im Erfolgsfall würde ich dann meinem Avatar auch mal die Mundwinkel hoch ziehen. ;-))

Deshalb möchte ich die Quellen auch nicht open source stellen (davon halte ich grundsätzlich nicht viel, will hier aber keine Diskussion darüber anfachen).
Wenn es Interessenten gibt würde ich das Framework aber sehr gern in einem kleinen Team weiter entwickeln.
Ich selbst kann nur im Feierabend daran arbeiten und bin entsprechend langsam.
Außerdem habe ich auch immer wieder mit Fehlversuchen zu kämpfen, obwohl ja nun die wesentlichen Grundlagen inzwischen gelegt sind.

Als Einzelentwickler bin ich nicht gewöhnt, im Team zu arbeiten. Aber ich würde mich gern mal darauf einlassen.
Wer Interesse hat, einfach mal per pm... (XE2 oder 3 Voraussetzung).


Anbei mal 4 pas-Dateien, die einen kleinen Einblick zeigen.
Am Edit sieht man, was an Ableitung zu einen Standardcontrol notwendig ist. Wenn man ein Control komplett nachbaut kann man natürlich auch komplexere Funktionalitäten regeln.
Die ssProps zeigen, wie die Werte der Objekteigenschaften ermittelt und zugewiesen werden (ist noch in Arbeit).
Den Navigator habe ich neu und einfacher aufgebaut, damit ich die benötigte Funktionalität komplett selbst regeln kann.

Union 20. Feb 2013 22:31

AW: ssFrameWork (StahliSoft - FrameWork)
 
Also die DB- und Listen-Anbindung solltest Du dringend abstrahieren, speziell im Navigator. Sonst bläst Du den ja irgendwann ins Unendliche auf.

stahli 21. Feb 2013 11:54

AW: ssFrameWork (StahliSoft - FrameWork)
 
Ja das ist richtig. Zunächst hatte ich nur die ObjektList- und ORM-Anbindung geregelt. Der Zugriff wird über den Manager abstrahiert.
Die IBQuery-Unterstützung kam nachträglich dazu und war eigentlich nicht als Dauerlösung gedacht. Wenn dies aber gewünscht wäre könnte man das noch neu strukturieren. Jetzt wollte ich erst mal die grundsätzliche Machbarkeit prüfen.

ABER: Die FMX-Controls (z.B. der Navigator) zeigen mir, dass es durchaus sehr sinnvoll sein kann, die Controls einfach und übersichtlich aufzubauen, auch wenn dies ggf. einige Zeilen mehr Quelltext erfordert.
So sind auf jeden Fall Anpassungen und Optimierungen leichter vorzunehmen.
Änderungen an den originalen FMX-Controls sind schwierig zu realisieren.
Eine Komponente erstellt man ein mal. Insofern darf es auch etwas mehr Quelltext werden wenn man dadurch die Wartbarkeit verbessert.
In späteren Projekten ist die Funkltionalität dann ja nicht schlechter...

stahli 22. Feb 2013 00:09

AW: ssFrameWork (StahliSoft - FrameWork)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich will nun als nächsten Schritt den Komponenteneditor angehen (ein Formular habe ich schon ;-)).
Man wird dort dann die Metadaten für die BL-Objekte (Klassen, Listen und Eigenschaften) definieren, das Speicherziel (Objektlisten, ORM, DataSet) einstellen und die entsprechenden Units erstellen können.
(Falls jemand Erfahrungen damit hat, erzeugte Units direkt in ein Package einzubinden und dies vielleicht sogar zu installieren, wäre er/sie hiermit um Hilfe gebeten.)

PS: Irgendwie ist das lustig, dass ich den Komponenteneditor für das Framework jetzt schon mit dem Framework aufbauen kann (bissl wie "Henne und Ei"). ;-)

stahli 3. Mär 2013 20:40

AW: ssFrameWork (StahliSoft - FrameWork)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Etwas OT, aber mal zum Thema RTTI:

Ich habe mal Tests bezüglich Geschwindigkeiten durchgeführt. Die RTTI bremst ganz gewaltig.
Wenn man die Funktion sehr häufig nutzt sollte man daher eine Alternative andenken.

Anbei ein kleines FMX-Projekt (Sorry, aber auf VCL lässt sich das ja ggf. auch leicht übertragen.)
Die Formularunit zeigt die verschiedenen Varianten.

Es werden 1Mio Objekte erzeugt und für alle Objkete die Eigenschaft "Value" ausgelesen und neu geschrieben.

Hier die Ergebnisse:
Zitat:

Create OL: 00:00:00.085 - Objektliste
Use OL (Value): 00:00:00.134 - direkte Benutzung der Eigenschaft
Use OL (Func): 00:00:00.239 - Zugriff auf die Eigenschaft über Funktionen
Use OL (Auto): 00:00:00.589 - Zugriff über Funktionen nach automatischer Erkennung
Use OL (RTTI): 00:00:20.688 - Zugriff über RTTI

Create ML: 00:00:00.072 - generische Liste
Use ML (Value): 00:00:00.132 - direkte Benutzung der Eigenschaft
Use ML (Func): 00:00:00.236 - Zugriff auf die Eigenschaft über Funktionen
Use ML (Auto): 00:00:00.583 - Zugriff über Funktionen nach automatischer Erkennung
Use ML (RTTI): 00:00:20.695 - Zugriff über RTTI
Da ich meine BL-Klassen automatisch erzeugen lasse, werde ich den Eigenschaftszugriff über entsprechende Funktionen realisieren.
Im Ergebnis geht das schneller. Mehr Schreibarbeit ist (durch das automatische Erzeugen der Klassen) damit auch nicht verbunden.
Das Framework kapselt den Zugriff und kann selbst die schnelle Version wählen wenn die Klasse dafür eingerichtet ist und andernfalls die RTTI nutzen.

Stevie 4. Mär 2013 07:23

AW: ssFrameWork (StahliSoft - FrameWork)
 
Zitat:

Zitat von stahli (Beitrag 1205793)
Ich habe mal Tests bezüglich Geschwindigkeiten durchgeführt. Die RTTI bremst ganz gewaltig.

Logisch, wenn du für jeden Lese und Schreibzugriff auf die Property die RTTI wieder komplett neu ausliest.

stahli 4. Mär 2013 11:13

AW: ssFrameWork (StahliSoft - FrameWork)
 
Alles andere würde wieder einen höheren Verwaltungsaufwand mit sich bringen.

Im Grunde wollte ich auch nur darauf hinweisen, dass (und wie stark) sich die Nutzung der RTTI auf die Geschwindigkeit auswirken kann.

stahli 26. Mär 2013 00:48

AW: ssFrameWork (StahliSoft - FrameWork)
 
Hier mal der aktuelle Stand meiner Gitterkomponente und einige Überlegungen zum weiteren Ausbau...
Video: http://youtu.be/HBq9eSbg_kA
Demoanwendung: www.stahlisoft.de/tmp/MyFriends.zip

Es läuft noch nicht alles perfekt, aber Funktionsweise und Ziele werden schon ganz gut erkennbar.
Der Spalteneditor für das Gitter ist seinerseits mit dem ssFrameWork und dem TssGrid aufgebaut (ich zeige auch kurz, wie einfach die Objekte daran gebunden werden können).
Sowohl das Beispielprojekt als auch der Spalteneditor kommen somit quasi ohne Quelltext aus.

An der Arbeitsweise der Listbox ist noch nichts weiter geändert. Hier sollen aber auch noch einige Erweiterungen folgen.

Da das Gitter und die Listbox nun grundsätzlich so funktionieren wie ich es vorgesehen hatte (natürlich sind künftig noch Erweiterungen und Korrekturen notwendig) werde ich mich nun erst einmal um den Komponenteneditor kümmern, der mir dann anhand von zu definierenden Metadaten die passenden Klassen für die Businesslogik erzeugt...

Wenn entsprechendes Interesse besteht lässt sich das auch für die VCL realisieren (und in eingeschränkter Form wohl auch für Delphiversionen < 2010).

stahli 29. Mär 2013 11:34

AW: ssFrameWork (StahliSoft - FrameWork)
 
Liste der Anhänge anzeigen (Anzahl: 2)
Master-Detail-Beziehungen lassen sich auch darstellen:

Das Mastergrid benutzt eine Menge: "ClassList".

Das DetailGrid benutzt die Menge "ClassPropertyList" der aktuell selektierten "Class".
Die Zuweisung erfolgt so: .ClassList[].ClassPropertyList

Grundsätzlich ließen sich auch mehrere Cursor auf eine Menge zuordnen.
Das könnte dann so aussehen:

.ClassList[100].ClassPropertyList
.ClassList[CursorCustomer].ClassPropertyList
.ClassList[Cursor2].ClassPropertyList

stahli 11. Apr 2013 00:11

AW: ssFrameWork (StahliSoft - FrameWork)
 
25 min kostenfreie Unterhaltung: http://youtu.be/BIQgb5-mWu0 ;-)

Ich erstelle nun mal ein neues kleines Demoprojekt mit vollständiger Unterstützung des Frameworks.
Auch wenn noch nicht alles fertig umgesetzt ist wird doch ersichtlich, welche Arbeitsweise das Framework ermöglicht.
Wenn die Entwicklung in der Form weiter läuft (oder mit Unterstützung sogar schneller und besser) wird das vielleicht wirklich so, ich mir das schon immer gewünscht habe... :)

stahli 1. Mai 2013 19:55

AW: ssFrameWork (StahliSoft - FrameWork)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe mal die Combobox etwas verändert, so dass sie sich besser in mein Framework einfügt (optisch und funktionell).
Im Grundsatz passt das schon ganz gut, aber ein paar Dinge werde ich mit der Zeit noch ausbauen.

Ich rufe ein eigenes Formular auf, das bei MouseLeave wieder geschlossen wird und Einträge ggf. scrollt.
Die Anordnung der Einträge ist voll in der Hand des Programmierers. Insofern kann man beliebige Änderungen und Erweiterungen vornehmen.

Man muss es ja nicht genau so regeln, aber die FMX-native Lösung ist einfach mal... :-(

Youtube spinnt etwas, aber das Hochladen hat zumindest funktioniert: http://youtu.be/LjS96oquwS8 (2 Min)

stahli 5. Mai 2013 22:36

AW: ssFrameWork (StahliSoft - FrameWork)
 
Hier mal die nächsten Schritte: http://youtu.be/XW5MnL45Nyo (10 min )

Die Zellen sind jetzt immer komplett vom gleichen Typ. Sie enthalten also nicht mehr eingesetzte Comboboxen oder Checkboxen sondern ändern lediglich je nach Vorgabe ihre Erscheinung und Verhaltensweise.
Entsprechend lassen sich beliebige weitere Zellentypen erstellen und verwenden.

Mein Problem ist noch der Umgang mit den Styles unter FMX. Das ist irgendwie zu verwirrend und vor allem auf Grund diverser Fehler und Probleme nicht wirklich benutzbar.

Bisher kommt die GUI nahezu ohne Quellcode aus. Die Füllung der Listen mit Einträgen kann direkt in den Businessklassen "vordefiniert" werden.

Als nächstes will ich dem Gitter die Möglichkeit bieten, die Zellen dynamisch zu formatieren.
Wenn in meinem Beispiel in der Spalte "NativeType=ntString" eingetragen wäre, müssten die Zellen MinValue und MaxValue für die Zeile ausgeblendet und dafür aber "MaxLength" und "UpperLower" eingeblendet werden.
Im Falle von ntBoolean müsste "DefaultValue" als Checkboxzelle dargestellt werden.
Das muss dann natürlich über einen Ereignishändler in der GUI erfolgen.

Mein Ziel ist aber, die GUI so weit wie möglich ohne Quelltext auskommen zu lassen. Entsprechend soll das Framework den größten Teil der Vermittlungsarbeit übernehmen.

stahli 23. Mai 2013 22:19

AW: ssFrameWork (StahliSoft - FrameWork)
 
Liste der Anhänge anzeigen (Anzahl: 5)
Der ORM flutscht nun grundsätzlich auch (ist natürlich noch einiges zu tun)...

Im Beispiel lese ich 33.000 Datensätze ein, erzeuge zwei Objekttypen und eine Verbindungstabelle und brauche dafür im Moment 27 Minuten.
Das scheint mir schon ganz ok.

Ein Datensatzwechsel im Gitter braucht 1/2 Sekunde (da alle Datencontrols neu gezeichnet und wenn vorhanden mit neuen Daten befüllt werden). Es rennt also nicht, ist aber m.E. flüssig genug. Einiges kann man sicher auch noch optimieren.

Das Formular benötigt absolut keinen Quelltext (OnCreate wäre verzichtbar).
Ansonsten habe ich nur zwei Units, in denen ich in zwei Funktionen die Businesslogik implementieren musste.

Den Rest erzeugt der Klassenexperte und die Datenbindung regelt das Framework.

"StrasseHausNr" ist eine berechnete Eigenschaft des Objektes TGrundstueck und kann im Gitter mit dargestellt werden.

Die Datenbank-Tabellen müssen derzeit noch von Hand angelegt werden (passend zu den Klassenstrukturen). Bestenfalls sollte das Framework diese Definitionen/Änderungen später natürlich selbst mit vornehmen.


Die letzten Tage war ich etwas gebremst aber jetzt bin ich doch wieder optimistisch. :-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:41 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