Vier D HomeArchivSeminareNachrichten - Twitter4D Expertise
Antworten auf Ihre Fragen •
Datenbank-Pflege •
4D Coaching •
OpenDDDD •
Termine •
4D Expert
V11/V12-Service • Konzepte •
Alternativen •
Meine Apps
Gebrauchtes Mac + iPhone: zu verkaufenFinden Geo-Themen + Projekte GoogleMap-Integration • GeoDDDD • Database Publishing • Database PhotographyVerschiedenes |
02 Jun 2006 Alles zusammenhalten …
Beginnt man mit 4D, hat man Methoden im Formular, in den Formularobjekten, in globalen Methoden und noch einer globalen Methode und noch einer und …. AusgangsbasisDie Methode bekommt als ersten Parameter einen Text, der benennt, was sie tun soll. Wie sich das gehört, ganz vorne weg die Variablen- und Parameter-Deklaration. Ganz ohne Parameter erlaube ich so, daß der Run-Button ab der 2004 verwendbar bleibt. Erster AusbauDer Selbstaufruf als Prozess-Starter. Ist $what leer wird entweder der Prozess gestartet oder eingeblendet und nach vorne geholt. Das Prozessstarten ruft sich selber auf (Current methode name) und übergibt als Parameter für $what den Wert "StartProcess". Hier führt es hin
Eine fertige und bis auf die oberste Ebene eingeklappte Methode sieht dann so aus: RekursionGanz wichtig: der rekursive Aufruf ist ein fest eingebautes Konzept. "newMessage" z.B. ist eine Dienstleistung für mehrere Abschnitte der Methode. Der Selbstaufruf wird z.B. in der On Load-Phase verwendet: KonzeptEin weiterer Anlauf das Konzept verständlich zu machen, diesmal graphisch aufbereitet: In der einen Methode läuft alles zusammen, der Start und das Beenden des Moduls – auf Wunsch als eigener Prozess, die Form-Methode mit allen Form-Events, die Button-Aktionen und ggf. der rekursive Aufruf, um Dienstleistungen innerhalb der Methode verwenden zu können und nicht eine eigene Dienstleistungsmethode dazustellen zu müssen. ProzessvariablenEin Nebeneffekt ist, daß die Prozessvariablen – ohne die ein Layout nicht zu gestalten ist – nur in dieser einen Methode leben. Sie werden nur in dieser Methode angelegt, mit Inhalt gefüllt, verwendet und zum Schluß wieder initialisiert (Arrays, Blobs, Bilder, hierarchische Listen, …). Das spart mir Verwaltungs-Aufwand – was ich auf einer Ebene der Methodenstruktur anlege wird am Ende des gleichen Abschnittes wieder gekillt – und damit manche Sorge. Prozessvariablen sind in diesem Vorfahren fast so gut wie lokale Variablen: es gibt sie nur in dieser Methode und am Ende des Prozeßes entfernt sie 4D für mich aus dem Speicher. NachtragOhne Pointer auf lokale Variablen ist das System un-realisierbar, also ab 2004.2. Ohne Ein- und Ausklappen der Methoden-Struktur würde ich mir solche Monstermethoden auch nicht antun. Die Anzahl der Parameter reduziert sich auf 3. This is old 2004-code. Even more generic today. This was written in 2006. That's many years ago and has proven itself very well. Everything at one place …4D-beginners like to spread logic all over the place, into forms, into every form-object and a function here and one here and some global methods. That's how the manual and examples suggests. Makes no sense in the long run. It needs to be efficient and one important point of efficiency is maintenance. I'm down to one global method per modul … component-like. BaseFirst parameter is of type text, which names what needs to be done. No parameter given means start from the Run-Button or from a menu-command. Of course, all variables are typed, all! At one place at the very top, so it can be found easily. ThenThe only thing the parameterless call does, is calling itself and start a process or show the process and bring it to the front. If $what is empty New Process calls itself (Current methode name) and sets $what to "StartProcess". Next
A done modul. Every level closed besides the top one. Recursion… is important: this is not that kind of bad recursion but a well managed concept. "newMessage" is a service, used for different parts of the method. ConceptTrying to convince of the concept graphically. There is just one method that handles everything, from start to end, form-events, button-actions, services for the same method and for other processes. The line-count of a method increases moderately, the count of methods decreases dramaticaly. There is no searching across methods, debugging through the levels of code-spread, everything is where it belongs to. ProcessvariablesAs a sideeffect, the count of processvariables goes down and they behave like local to the module ones. No more memory-leaks if done properly, which is destroying of potential leaks just a couple of lines down of where it is created. Think of hierarchical lists and never again forget to kill the leaker. AppendixWithout V12 method-editor remembering collapse- and expand-state it would be less helpful. Read also about standard-count of parameters reduces to 3. |