Ereignishandling

Für Fragen von Einsteigern und Programmieranfängern...
wodim
Beiträge: 125
Registriert: Fr 9. Aug 2013, 08:28
OS, Lazarus, FPC: Debian 12 (Bücherwurm), M$Win10, Win11, Laz 3.8 FPC 3.2.2
CPU-Target: 64Bit

Re: Ereignishandling

Beitrag von wodim »

Zvoni hat geschrieben: Fr 14. Feb 2025, 11:20
wodim hat geschrieben: Fr 14. Feb 2025, 10:15
Zvoni hat geschrieben: Do 13. Feb 2025, 08:28und lässt ne UDP-Breitseite ab.
Und das ergäbe wie gesagt ein Feuerwerk von geschätzt >~90% sinnlosen Messages. Nehmen wir an, 100 User sind gerade aktiv. Wie viele von denen würde wohl interessieren, dass bei der Anmeldung gerade die Daten eines neuen Patienten (von ~>10.000 jährlich) erfasst wurden, dass Dr. Nötigenfalls gerade die Daten von Patient Max Mustermann geändert hat ("Operation gelungen, Patient tot, Angehörige benachrichtigt" oder so), und, und, und, ...

Eben auch dafür ist die "Mittelschicht" zuständig, dass nur die benachrichtigt werden, die gerade mit den Daten von Max arbeiten, und auch gleich die Updates kriegen. Alles in allem eben für die Optimierung des Netzwerktraffics, sagen wir mal. Sehe ich das falsch?
Denke schon.
Weil in dem Fall, eben damit die Objektschicht dann weiss, dass von 100 Usern, nur die User 12, 56 und 93 zu benachrichtigen sind, müsste diese User quasi in "Echtzeit" immer der Objektschicht mitteilen, woran sie gerade arbeiten (und aben an Updates interessiert sind).
Müssen sie nicht. Das ist genauso Sache der Objektschicht, sich das zu merken. Ganz einfach: Das Objekt "Patient" mit der Eigenschaft Id = 46823 hat eine Eigenschaft User = ["Dr.Nötigenfalls", "Schwester Klara", "Helfer Lars"], also alle User, die schon mal darauf zugegriffen haben. (Nicht ihre zufällige Position 12, 56 und 93 im "Pool" von 100, sondern auch eindeutige Ids.) Was hältst du davon?

(Du siehst, ich bin bestrebt, den Client so dumm wie möglich zu programmieren. Steuerung irgendwelcher Abläufe ist NICHT seine Aufgabe.)
Zuletzt geändert von wodim am Fr 14. Feb 2025, 14:53, insgesamt 1-mal geändert.
Das langsamste und fehleranfälligste Teil sitzt immer vor der Tastatur. Und wenn's "Programmierer" heißt.

Benutzeravatar
Zvoni
Beiträge: 368
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: Ereignishandling

Beitrag von Zvoni »

wodim hat geschrieben: Fr 14. Feb 2025, 13:46
Zvoni hat geschrieben: Fr 14. Feb 2025, 11:20
wodim hat geschrieben: Fr 14. Feb 2025, 10:15
Und das ergäbe wie gesagt ein Feuerwerk von geschätzt >~90% sinnlosen Messages. Nehmen wir an, 100 User sind gerade aktiv. Wie viele von denen würde wohl interessieren, dass bei der Anmeldung gerade die Daten eines neuen Patienten (von ~>10.000 jährlich) erfasst wurden, dass Dr. Nötigenfalls gerade die Daten von Patient Max Mustermann geändert hat ("Operation gelungen, Patient tot, Angehörige benachrichtigt" oder so), und, und, und, ...

Eben auch dafür ist die "Mittelschicht" zuständig, dass nur die benachrichtigt werden, die gerade mit den Daten von Max arbeiten, und auch gleich die Updates kriegen. Alles in allem eben für die Optimierung des Netzwerktraffics, sagen wir mal. Sehe ich das falsch?
Denke schon.
Weil in dem Fall, eben damit die Objektschicht dann weiss, dass von 100 Usern, nur die User 12, 56 und 93 zu benachrichtigen sind, müsste diese User quasi in "Echtzeit" immer der Objektschicht mitteilen, woran sie gerade arbeiten (und aben an Updates interessiert sind).
Müssen sie nicht. Das ist genauso Sache der Objektschicht, sich das zu merken. Ganz einfach: Das Objekt "Patient" mit der Eigenschaft Id = 46823 hat eine Eigenschaft User = ["Dr.Nötigenfalls", "Schwester Klara", "Helfer Lars"], also alle User, die schon mal darauf zugegriffen haben. (Nicht ihre Position 12, 56 und 93 im "Pool" von 100, sondern auch eindeutige Ids.) Was hältst du davon?

(Du siehst, ich bin bestrebt, den Client so dumm wie möglich zu programmieren. Steuerung irgendwelcher Abläufe ist NICHT seine Aufgabe.)
Und wie soll dein Programm merken, dass "Schwester Lara" nicht mehr upgedated werden muss (weil vom Fall abgezogen, sie hat nen neuen fall), sondern Schwester Maria damit jetzt betraut ist?

EDIT: Oder "registrieren" diese User ihr "Interesse" an diesem Fall?
Also eine "Push" an die Datenbank ="Halte mich auf dem laufenden"
Oder ein "Pop" an die Datenbank = "Nicht mehr informieren. Bin raus aus der Nummer"
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

wodim
Beiträge: 125
Registriert: Fr 9. Aug 2013, 08:28
OS, Lazarus, FPC: Debian 12 (Bücherwurm), M$Win10, Win11, Laz 3.8 FPC 3.2.2
CPU-Target: 64Bit

Re: Ereignishandling

Beitrag von wodim »

Zvoni hat geschrieben: Fr 14. Feb 2025, 14:00
wodim hat geschrieben: Fr 14. Feb 2025, 13:46
Zvoni hat geschrieben: Fr 14. Feb 2025, 11:20Denke schon.
Weil in dem Fall, eben damit die Objektschicht dann weiss, dass von 100 Usern, nur die User 12, 56 und 93 zu benachrichtigen sind, müsste diese User quasi in "Echtzeit" immer der Objektschicht mitteilen, woran sie gerade arbeiten (und aben an Updates interessiert sind).
Müssen sie nicht. Das ist genauso Sache der Objektschicht, sich das zu merken. Ganz einfach: Das Objekt "Patient" mit der Eigenschaft Id = 46823 hat eine Eigenschaft User = ["Dr.Nötigenfalls", "Schwester Klara", "Helfer Lars"], also alle User, die schon mal darauf zugegriffen haben. (Nicht ihre zufällige Position 12, 56 und 93 im "Pool" von 100, sondern auch eindeutige Ids.) Was hältst du davon?

(Du siehst, ich bin bestrebt, den Client so dumm wie möglich zu programmieren. Steuerung irgendwelcher Abläufe ist NICHT seine Aufgabe.)
Und wie soll dein Programm merken, dass [...] Schwester Maria damit jetzt betraut ist?
Das merkt es dann, wenn "Schwester Maria" auf die Daten von Patient Max zugreift. Moment, Missverständnis: "Schwester Maria" ist hier nicht die gute Frau selber, die vor dem Gerät sitzt, sondern konkret die Anwendung, die sich als "Schwester Maria" angemeldet hat. (Das können durchaus auch mehrere sein, wir wollen keinem verbieten, sich auf mehreren Geräten anzumelden.)
Zvoni hat geschrieben: Fr 14. Feb 2025, 14:00Oder "registrieren" diese User ihr "Interesse" an diesem Fall?
Na, sagen wir mal, sie bekunden es. :wink: Indem sie die Daten von Patient Mäxchen anfordern, wie gesagt. Und für die "Registrierung" ist dann wer zuständig? Richtig, unser "Manager" in der Objektschicht, s. o.
Zvoni hat geschrieben: Fr 14. Feb 2025, 14:00Also eine "Push" an die Datenbank ="Halte mich auf dem laufenden"
Ich höre immer "Datenbank". Wir wiederholen: Wer managt das, und wo ist das (temporär) gespeichert? (Darfst auch oben spicken.) :wink:
Zvoni hat geschrieben: Fr 14. Feb 2025, 14:00... dass "Schwester Lara" nicht mehr upgedated werden muss (weil vom Fall abgezogen,)
Das ist eine andere Frage. :wink: (Mal abgesehen davon, dass es nicht akut tragisch ist, wenn "Schwester Lara" Daten kriegt, die sie nicht mehr braucht.) Aber auf keinen Fall so:
Zvoni hat geschrieben: Fr 14. Feb 2025, 14:00ein "Pop" an die Datenbank = "Nicht mehr informieren. Bin raus aus der Nummer"
Sondern wie?
Das langsamste und fehleranfälligste Teil sitzt immer vor der Tastatur. Und wenn's "Programmierer" heißt.

wodim
Beiträge: 125
Registriert: Fr 9. Aug 2013, 08:28
OS, Lazarus, FPC: Debian 12 (Bücherwurm), M$Win10, Win11, Laz 3.8 FPC 3.2.2
CPU-Target: 64Bit

Re: Ereignishandling

Beitrag von wodim »

Geh' mal davon aus: Unser "Objektmanager" weiß erst mal nichts von der Entscheidung, dass "Schwester Lara" nichts mehr mit Patient Mäxchen zu tun hat. Muss er auch nicht. Er muss nur immer mal nachgucken, wer wann zuletzt auf die Daten zugegriffen hat (im Objekt, nicht direkt in der Datenbank). Und wenn "Schwester Lara" - sagen wir - eine Woche lang keinen Bedarf hatte, kann er sie getrost aus der Liste (der Eigenschaft User = ["Dr.Nötigenfalls", "Schwester Lara", "Helfer Lars"] des Objekts "Patient" mit der Eigenschaft Id = 46823) löschen. Einverstanden?
Das langsamste und fehleranfälligste Teil sitzt immer vor der Tastatur. Und wenn's "Programmierer" heißt.

wodim
Beiträge: 125
Registriert: Fr 9. Aug 2013, 08:28
OS, Lazarus, FPC: Debian 12 (Bücherwurm), M$Win10, Win11, Laz 3.8 FPC 3.2.2
CPU-Target: 64Bit

Re: Ereignishandling

Beitrag von wodim »

Aber ein ganz anderes, grundlegendes Problem: Kann es sein, dass ich mit meinen Vorstellungen von einer 3-Tier-Architektur mit einer "Objektschicht" zwischen Clients und Datenbank (auf dem Server, mit Zugriff für alle Clients) und dem entsprechenden "Management" auf dem Server hier völliges Neuland betrete? Habe bald den Eindruck, das kann ich mir aber bei einer so schön objektorientierten Sprache wie Freepascal beim besten Willen nicht vorstellen. Ich finde nur im großen weiten Internet nichts dazu, nicht mal einen Ansatz zu einem Beispiel (oder ein Beispiel für einen Ansatz, wie man's nimmt). :?
Das langsamste und fehleranfälligste Teil sitzt immer vor der Tastatur. Und wenn's "Programmierer" heißt.

wodim
Beiträge: 125
Registriert: Fr 9. Aug 2013, 08:28
OS, Lazarus, FPC: Debian 12 (Bücherwurm), M$Win10, Win11, Laz 3.8 FPC 3.2.2
CPU-Target: 64Bit

Re: Ereignishandling

Beitrag von wodim »

Zvoni hat geschrieben: Do 13. Feb 2025, 08:28 [Für "middle-tier" (Objekt-/Domänen-Schicht) auf einem eigenen Rechner irgendwo im LAN] sind wir wieder bei Sockets (oder eine andere Netzwerk-Kommunikations-Technik --> Synapse, lnet, wasweissich)
Hm, hm ...
https://stackoverflow.com/questions/257 ... and-read-t
You can use an excellent, free and multiplatform library called Synapse. It has built-in support for many protocols (FTP, HTTP, POP3, LDAP and so on), and it also allows you to implement your own protocols. You can write your own clients and servers with just few lines of code—amazing!
Kaum zu glauben. Kann das wahr sein?
Zuletzt geändert von wodim am Sa 15. Feb 2025, 12:17, insgesamt 1-mal geändert.
Das langsamste und fehleranfälligste Teil sitzt immer vor der Tastatur. Und wenn's "Programmierer" heißt.

wodim
Beiträge: 125
Registriert: Fr 9. Aug 2013, 08:28
OS, Lazarus, FPC: Debian 12 (Bücherwurm), M$Win10, Win11, Laz 3.8 FPC 3.2.2
CPU-Target: 64Bit

Re: Ereignishandling

Beitrag von wodim »

Hallo, warum sagt denn keiner was dazu? Ich komme mir wieder mal vor wie ein Kind, das nach dem Klapperstorch gefragt hat. :wink:
Das langsamste und fehleranfälligste Teil sitzt immer vor der Tastatur. Und wenn's "Programmierer" heißt.

wodim
Beiträge: 125
Registriert: Fr 9. Aug 2013, 08:28
OS, Lazarus, FPC: Debian 12 (Bücherwurm), M$Win10, Win11, Laz 3.8 FPC 3.2.2
CPU-Target: 64Bit

Re: Ereignishandling

Beitrag von wodim »

Also: Wo finde ich mal ein Beispiel, das genauso einfach ist, wie mein Server und meine Clients mit Synapse arbeiten sollen? Da sollen ja nur Strings übertragen werden. Ggf. sehr lange, aber das wär's auch schon. Ich finde nur Beispiele für E-Mails, ganze Webseiten etc.
Das langsamste und fehleranfälligste Teil sitzt immer vor der Tastatur. Und wenn's "Programmierer" heißt.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2807
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Ereignishandling

Beitrag von m.fuchs »

wodim hat geschrieben: Sa 15. Feb 2025, 12:13 Hallo, warum sagt denn keiner was dazu? Ich komme mir wieder mal vor wie ein Kind, das nach dem Klapperstorch gefragt hat. :wink:
Vielleicht hat ein Großteil der User einfach keine Lust dir zu antworten...
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

wodim
Beiträge: 125
Registriert: Fr 9. Aug 2013, 08:28
OS, Lazarus, FPC: Debian 12 (Bücherwurm), M$Win10, Win11, Laz 3.8 FPC 3.2.2
CPU-Target: 64Bit

Re: Ereignishandling

Beitrag von wodim »

Manche Fragen muss man sich eben selber beantworten.

https://stackoverflow.com/questions/307 ... locksocket

Ob wir das zum Laufen kriegen?
Das langsamste und fehleranfälligste Teil sitzt immer vor der Tastatur. Und wenn's "Programmierer" heißt.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6768
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Ereignishandling

Beitrag von af0815 »

Manche Fragen muss man sich eben selber beantworten.

https://stackoverflow.com/questions/307 ... locksocket

Ob wir das zum Laufen kriegen?
Falsche Aussage, richtig wäre: "Ob ich das zum Laufen kriege".

Antwort: Kommt drauf an. Für das Beispiel muss der Empfänger bekannt sein und es wird nur ein Empfänger angesprochen. Passt das mit dem zusammen was du willst ?

Ich sehe bei dem ganzen nur, das du krampfhaft probierst irgendwelche Schichten zu (er)finden. Ich finde jetzt keinen wirklich roten Faden in deinen ganzen Posts. Das einzige was ich mitlese ist 3tier. Die hast du bei tiOPF und Mormot: Datenbank, Verarbeitung, Userinterface. Bei RAD sind es IMHO 2tier. Da wachsen, je nach Definition Datenbank und Verarbeitung zusammen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

wodim
Beiträge: 125
Registriert: Fr 9. Aug 2013, 08:28
OS, Lazarus, FPC: Debian 12 (Bücherwurm), M$Win10, Win11, Laz 3.8 FPC 3.2.2
CPU-Target: 64Bit

Re: Ereignishandling

Beitrag von wodim »

af0815 hat geschrieben: Sa 15. Feb 2025, 17:32
Manche Fragen muss man sich eben selber beantworten.

https://stackoverflow.com/questions/307 ... locksocket

Ob wir das zum Laufen kriegen?
Falsche Aussage, richtig wäre: "Ob ich das zum Laufen kriege".
Ja doch, ich möchte nicht, dass der Eindruck entsteht, ich würde von mir selbst in der 3. Person sprechen. (Wenn mir schon bei ganz objektiver Selbstdarstellung "Überheblichkeit" vorgeworfen wird.) :wink: "Ob wir das hinkriegen" war nur so 'ne landläufige Redewendung.
af0815 hat geschrieben: Sa 15. Feb 2025, 17:32Antwort: Kommt drauf an. Für das Beispiel muss der Empfänger bekannt sein und es wird nur ein Empfänger angesprochen. Passt das mit dem zusammen was du willst ?
Selbstverständlich möchte ich keine Messages wie Schrotschüsse ins Netz jagen, sondern ganz gezielt ein Client was vom Server anfordern oder der Server bestimmten Clienten was mitteilen. In Ausnahmefällen allen, dann müssen eben andere Methoden angewendet werden.
af0815 hat geschrieben: Sa 15. Feb 2025, 17:32Ich sehe bei dem ganzen nur, das du krampfhaft probierst irgendwelche Schichten zu (er)finden.
Ich find's ja auch Krampf, dass ich hier was nachbaue, was woanders seit Jahrzehnten "Standard" ist. (Übrigens auch bei der Entwicklung Laune macht und viel Zeit spart.)
af0815 hat geschrieben: Sa 15. Feb 2025, 17:32Ich finde jetzt keinen wirklich roten Faden in deinen ganzen Posts. Das einzige was ich mitlese ist 3tier.
Genau. Darauf kommt's mir an. Und die "Mittelschicht" konsequent objektorientiert.
af0815 hat geschrieben: Sa 15. Feb 2025, 17:32Die hast du bei tiOPF und Mormot: Datenbank, Verarbeitung, Userinterface. Bei RAD sind es IMHO 2tier. Da wachsen, je nach Definition Datenbank und Verarbeitung zusammen.
Ähm, wie gesagt: Nach zwei Fehlversuchen (Laz-n-tier und tiOPF) hatte ich den Kanal voll von für meine Zwecke völlig ungeeigneten Tools, keinen Bock mehr, mich in ein drittes einzuarbeiten, um dann vielleicht auch irgendwann feststellen zu müssen, dass es mir nichts nützt. (Schon solche "Raffinessen" wie mehrere Schichten innerhalb einer Anwendung - da war ich ja geschockt, wozu soll das wohl gut sein, kannst du mir das erklären?)

Nee, nee, da bastele ich mir doch lieber selber was. Dauert vielleicht etwas länger, aber kommt auch was 'raus dabei. Und ohne großen Overhead, den ich für meine paar Funktionen im Leben nicht brauche, und der das Ganze höchstens ausbremst.
af0815 hat geschrieben:Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen.
Siehst du, da sagst du's selber. :wink:
Das langsamste und fehleranfälligste Teil sitzt immer vor der Tastatur. Und wenn's "Programmierer" heißt.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6768
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Ereignishandling

Beitrag von af0815 »

Bei den Schichtmodellen kommt es immer auf den Betrachtungswinkel an. 3tier kann App basierend oder auch über Servergrenzen gehen. Das zeigen auch die entsprechenden Wikipediaeinträge. Daher liegt es immer im Auge des aktuellen Betrachters das richtige Modell zu erspähen.
Deswegen ist es manchmal besser sein eigenes Modell zu finden. Deswegen bin ich auch aus Diskussion jetzt draussen. Finde deinen eigenen Betrachtungswinkel.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

wodim
Beiträge: 125
Registriert: Fr 9. Aug 2013, 08:28
OS, Lazarus, FPC: Debian 12 (Bücherwurm), M$Win10, Win11, Laz 3.8 FPC 3.2.2
CPU-Target: 64Bit

Re: Ereignishandling

Beitrag von wodim »

af0815 hat geschrieben: Sa 15. Feb 2025, 21:54 Bei den Schichtmodellen kommt es immer auf den Betrachtungswinkel an. 3tier kann App basierend oder auch über Servergrenzen gehen.
Kann. Sollte aber über Servergrenzen gehen. Nochmal: Wozu sollte es sonst gut sein?
af0815 hat geschrieben: Sa 15. Feb 2025, 21:54Das zeigen auch die entsprechenden Wikipediaeinträge. Daher liegt es immer im Auge des aktuellen Betrachters das richtige Modell zu erspähen. Deswegen ist es manchmal besser sein eigenes Modell zu finden. Deswegen bin ich auch aus Diskussion jetzt draussen.
Aber die Frage beantwortest du mir doch bitte noch? Mir scheint nämlich, dein "Betrachtungswinkel" ist der eines reinen Theoretikers. Wäre schön, wenn er sich etwas erweitern könnte.
af0815 hat geschrieben: Sa 15. Feb 2025, 21:54Finde deinen eigenen Betrachtungswinkel.
Den habe ich, seit ich zum ersten Mal mit 3-Tier gearbeitet habe. Vor ~ 25 Jahren, in Smalltalk. :wink: Und da war, wie fast immer, die Praxis der beste Lehrmeister. :wink:
Das langsamste und fehleranfälligste Teil sitzt immer vor der Tastatur. Und wenn's "Programmierer" heißt.

Gesperrt