German Programmierstil / Strukturierung

Roeschti

Member
Licensed User
Longtime User
Da meine Anwendung inzwischen etwas weiter gediehen ist, merke ich dass der Code und das Handling im Editor recht unübersichtlich geworden ist. Gibt es irgend eine clevere Möglichkeit, den Code besser zu strukturieren bzw. auszulagern? Das Prinzip mit den "Static Code Module" finde ich äusserst mühselig und wenig praktikabel, da ich nur wenige Funktionen habe, welche "autonom" sind. Ich würde gerne logisch zusammengehörige Sachen in ein Modul packen.

Zum besseren Verständnis ein Beispiel:

Ich habe sehr viele http Requests und Antworten zu verarbeiten, sowie diverse Settings zu speichern und zu laden. Nun wollte ich das ganze http Drumherum in ein Modul auslagern. Ich kann problemlos aus dem Main Modul den gewünschten Request absetzten (modRequests.Get....). Da die Antworten aber auch in diesem Modul ausgewertet werden müssen
( Sub hc_ResponseSuccess...) und die Werte aus den Requests in verschiedenen Views angezeigt werden müssen, muss ich jedesmal wieder eine Sub im Main Modul aufrufen, welche die Antwort entgegennimmt um nacher die passenden Views abzufüllen, da dies aus einem Modul ja nicht geht. Das artet also in einem ständigen Hin- und Her-Aufruf irgendwelcher
Subs in den Modulen aus und ich muss haufenweise zusätzlichen Code schreiben, was das Ganze nur noch unübersichtlicher macht.

Aber noch viel mühsamer ist der Compiler, welcher die Aufruf Reihenfolge nicht berücksichtigt. Beispiel:
In den Settings kann man Zielserver-IP Adresse eingeben. Beim Programmstart werden als erstes die Settings geladen und eine in der Process_Globals definierte Variable im Mainmodul "strServerIP" mit der IP Adresse aus den geladenen Settings gefüllt.

Im obg. Modul mit den Requests ist eine Sub drin für die Anfragen zu stellen die so aussieht
Sub SendRequest(strParam As String, intID As Int)
Dim req As HttpRequest
req.InitializeGet("http://" & strServerIP & "/?" & strParam)
hc.Execute(req, intID)
End Sub

Beim Versuch die Anwendung zu kompilieren erscheint sinngemäss die Meldung "....Variable wird verwendet, bevor ihr ein Wert
zugewiesen wurde", obwohl mit LoadSettings die Varaible gefüllt wurde. Natürlich kann man das Problem lösen, in dem im Modul modRequests die Variable strServerIP global deklariert wird und bei der Sub LoadSettings dann die Varaible im Modul gefüllt wird.

Konsequenz daraus ist, dass man so fast alles doppelt machen muss. Ein Modul lädt Settings, übergibt dem anderen Modul die geladenen Werte, welche wiederum einen anderen Modul Werte weiterreicht wenn sie dort gebraucht werden...Toll :-/

Deshalb die Frage: gibt es so eine Art Best Practices oder einen speziellen Programmierstil oder eben eine Möglichkeit, wie man logisch zusammenhängende Code-Teile in Module oder ähnliches auslagern kann ohne unzählige Callbacks?
 

klaus

Expert
Licensed User
Longtime User
Prozessglobale Variablen brauchen, in anderen Modulen, als Prefix den Modulnamen des Moduls wo sie deklariert wurden.
Wenn Du zum Beispiel in Sub Process_Global im Main Modul die Variable strServerID definierst hast, musst Du diese in anderen Modulen mit Main.strServerID aufrufen !

Du kannst Views als Variable an Routinen in Codemodulen übergeben.
Du kannst im Code auch Regionen definieren und diese auf- und zuklappen.
Schau Dir mal das Beispielprogramm vom Charts Modul an.

Beste Grüsse.
 

Roeschti

Member
Licensed User
Longtime User
Jep, so funktioniert's wie ich mir das vorgestellt habe. Merci, wieder was gelernt :)
 

corwin42

Expert
Licensed User
Longtime User
Um innerhalb eines Files zu strukturieren kann man auch #Region benutzen:

B4X:
#Region GUI Code

<Alle Subs, die was mit GUI Code zu tun haben>

#End Region

Diese Blöcke kann man dann auf- und zuklappen.

Kann auch manchmal helfen, den Code besser zu strukturieren.
 
Top