@af0815 hatte geschrieben
af0815 hat geschrieben: So 21. Feb 2021, 11:33
Grundlegend gibt es noch die Idee, nur auf Interfaces zu programmieren. Damit ist man noch flexibler und komplett entkoppelt. Ist aber wieder weg von der Idee des RAD.
Das einzige, was aus meiner Sicht mit RAD rapide=schnell geht, ist das "zusammen-clicken" des GUI.
Nur wenn ich (andere) toll gemachte, fertige Lazarus-Components miteinander verknüpfe,
geht's auch bei Funktionalitäten unter der Motorhaube "rapide" schnell.
Aber vieles was ich brauche, muß ich am Ende doch komplett zu Fuß schreiben, da is eh nix RAD ..
PascalDragon hat geschrieben: Di 23. Feb 2021, 13:39
Bitte miss den Namen
COM Interface und
CORBA Interface nicht zu viel Bedeutung bei. Auf Delphi/FPC bezogen wären eigentlich die Namen
Reference Counted Interface und
Raw Interface korrekter.
Vielen Dank @PascalDragon für die technischen Erläuterungen !
Mit dem "Interface" Modell muß ich auf jeden Fall erstmal "herum-spielen",
um in der Praxis die Funktionsweise und den Nutzen ganz zu verstehen.
PascalDragon hat geschrieben: Di 23. Feb 2021, 13:39
Auch bei MVC sind Interfaces im Object Pascal Sinne
nicht notwendig. Ja, du brauchst eine sinnvolle Schnittstelle, aber wie
genau du sie umsetzt ist nicht vorgegeben.
Das Beispiel
Model GUI Mediator ist in der PDF gut erklärt,
leider aber ohne den kompletten Source-Code auf der CD/DVD
aus der damaligen TOOLBOX-Ausgabe nicht komplett nachvollziehbar.
Ich hab's gestern mal versucht, die Code-Schnipsel sinnvoll in ein Projekt zu gießen,
bin aber (noch) nicht sicher ob es tatsächlich funktioniert.
Aber das hier gibt mir mehr zu denken:
PascalDragon hat geschrieben: Di 23. Feb 2021, 13:39
Für die Kommunikation zwischen Threads ist in der Tat eine threadsichere Queue oder ähnliches gepaart mit Synchronisierungsmechanismen wie
TEvent am Besten geeignet. In vielen, einfachen Fällen kann man auch einfach
TThread.Synchronize oder
TThread.Queue nehmen.
Was mir generell noch fehlt in Lazarus, ist ein Modell, eine Kontroll-Struktur, eine massive
automatisierte Unterstützung von Multi-Threads, in / durch Lazarus.
Also quasi unter "
Erzeuge neues Projekt" ein Template "Multi-Threaded Application".
Sowas gibt es nicht, und auch meine bisherigen Erfahrungen mit Threads zeigen,
daß dieser fromme Wunsch wohl schwierig zu realisieren ist. Zu unterschiedlich sind wohl
die Arten, wie man Threads nutzt, mal einmalig ("One-Shot"), mal permanent im Hintergrund,
aber nicht zeitkritisch, mal - wie bei Audio und MIDI - mit der Anforderung "Echtzeit", bitte ruckelfrei.
Die Buffer müssen immer voll sein, und "sofort" raus an die Treiber, sonst stottert es.
TThread.Synchronize ist da wohl ungünstig weil es den Thread anhält.
Ich hatte mal ThreadManager.pas genutzt, =>
https://forum.lazarus.freepascal.org/in ... pic=9708.0
aber in der ursprünglichen Implementierung bringt es keine standarisierten "Kommunikations-Kanäle" mit.
=>
https://wiki.lazarus.freepascal.org/Man ... ads_System
So
ganz grob betrachtet gibt es eigentlich keinen großen Unterschied, ob ich nun
innerhalb des MainThread, wo das GUI läuft, kommuniziere zwischen Funktionseinheiten, oder zwischen Threads.
(Oder noch extremer: "Verteilte Anwendungen")
In beiden Fällen brauche ich Schnittstellen ("Interfaces"), am besten dieselben.
So, hier hört dann meine Phantasie auf, das krieg ich nicht so leicht in Code gegossen ..
