Domino 9 und frühere Versionen > ND6: Entwicklung
Strategie bei ScriptLibraries
TMC:
Jeder Programmierer hat ja wiederverwendbare Routinen, und lagert diese wohl in ScriptLibraries aus.
Ich habe mir angewohnt, folgende Basis-ScriptLibs zu haben:
[*]LibStandard (Sämtliche Backend-Routinen um Arrays zu behandeln, Stringfunctions, DateTime-Functions, ErrorHandling-Routinen, etc.)
[*]LibStandardUI (sämtliche allgemein verwendbare UI-Routinen)
[*]LibStandardNotesAPI (Routinen, die die NotesAPI verwenden, z.B. ProgressBar)
[*]LibStandardWinAPI (Routinen, welche die WinAPI verwenden, z.B. BrowseFolder)
[*].. weitere individuelle Libs[/list]
Die LibStandard wird in den anderen Libs immer per Use "LibStandard" eingebunden.
Außerdem werden alle oben erwähnten Libs in all meine DB's kopiert.
Die LibStandard brauche ich praktisch überall (Masken, Views, Agents, etc.).
Bei Bedarf kommt dann noch der Rest hinzu. Applikationsspezifische Libs kommen in der Regel in:
[*]LibApplication
[*]LibApplicationUI
[*]LibApplicationNotesAPI
[*]LibApplicationWinAPI[/list]
Wobei auch all diese Libs wieder ein Use "LibStandard" enthalten.
Wenn ich nun in einer Maske z.B. die 'LibApplicationUI' brauche, dann steht in der Maske:
Use "LibStandard" '(weil eh IMMER dabei)
Use "LibApplicationUI"
Aber dadurch werden ja Libs mehrfach geladen (in diesem Beispiel die "LibStandard" doppelt).
Lässt sich das sinnvoll vermeiden, ohne die Übersicht zu verlieren? Gerade die Kombination von Libs kann ja da schnell mal ein mehrfaches Laden von Libs hervorrufen, andererseits soll die "Gliederung" IMHO möglichst durchschaubar und einfach bleiben.
Ich habe auch schon gesehen/gelesen, dass Leute Container-Libs verwenden. Also Libs, die keinen Code enthalten, sondern nur Use statements, um Libs einzubinden. Ich weiß aber auch nicht, ob mich das wirklich weiterbringt.
Wie ist da Eure Strategie? Was würdet Ihr empfehlen?
Meine "LibStandard" enthält aktuell etwa 80 subs/functions + ein paar Klassen. Laded aber sehr schnell.
Axel:
--- Zitat von: TMC am 04.03.05 - 19:42:33 ---Ich habe auch schon gesehen/gelesen, dass Leute Container-Libs verwenden. Also Libs, die keinen Code enthalten, sondern nur Use statements, um Libs einzubinden. Ich weiß aber auch nicht, ob mich das wirklich weiterbringt.
--- Ende Zitat ---
Hi Matthias,
ich denke mal, das ist nur Ersparnis bei der Tipparbeit und verhindert den einen oder anderen Fehler. Man bindet eine Lib ein und hat auf einen Schlag alle die man braucht. Ist, denke ich, eine Philosophie-Frage. Was mir bei der Sache nicht ganz klar ist, wenn du so eine Container-Lib hast und du rufst eine Funktion aus einer der eingebundenen Libs auf, ob er dann alle Libs lädt.
Bei einer einzelnen, lädt er ja, soweit ich das mal gelesen habe, alles was in der Lib enthalten ist.
Bei den Klassen hab ich mir angewöhnt, pro Klasse eine Lib zu bauen. Das ist für mich am übersichtlichsten. Bisher bin ich eigentlich ganz gut damit gefahren.
Deine Standard-Lib mit 80 Funktionen und Subs würde ich versuchen aufzuteilen. Vielleicht thematisch, in Stringfunktionen, Datumsfunktionen usw. Bei der Anzahl verlierst du doch sehr leicht den Überblick, oder?
Axel
TMC:
--- Zitat von: Axel am 04.03.05 - 19:57:25 ---Deine Standard-Lib mit 80 Funktionen und Subs würde ich versuchen aufzuteilen. Vielleicht thematisch, in Stringfunktionen, Datumsfunktionen usw. Bei der Anzahl verlierst du doch sehr leicht den Überblick, oder?
--- Ende Zitat ---
Das hatte ich früher so. Aber mich hat es genervt wenn ich z.B. einen Agenten schrieb:
Erstmal die LibArray eingebunden. Dann brauchte ich noch Date/Time - Functions. Dann später vielleicht noch was zur String-Bearbeitung.
Daher habe ich das alles revidiert und unterscheide nur noch zwischen Backend und Frontend.
Das ganze ist auch sehr übersichtlich, Beispielauszug wie das aussieht auf der linken Seite der ScriptLibs:
[*]Array_IsEmpty
[*]Array_IsMember
[*]Array_Subset
[*]DB_GetProfileFieldValue
[*]Doc_GetAttachmentsSize
[*]DT_Adjust
[*]OS_WinTemp
[/list]
D.h. ich arbeite mit Präfix zur Gliederung.
Der ScriptSorter von der Sandbox sortiert mir die ScriptLibs dann noch bei Bedarf alphabetisch.
Große Klassen kommen bei mir aber auch in separate Libs.
Mit der Container-Lib bin ich mir auch nicht wirklich sicher, ob einen das wirklich weiterbringt.
koehlerbv:
Grundlegend verwende ich das gleiche Vorgehen wie Du, Matthias. Libs werden freundlicherweise nicht doppelt geladen, trotzdem achte ich peinlich darauf, dass es schon konzeptionell nicht passiert, Libs doppelt zu "usen".
Wie auch Axel halte ich aber Libs mit mehr als 80 Funktionen als Standard-Lib für überdimensioniert - sowas sollte man aufteilen. Vielleicht weniger nach Art der Funktionen, als vielmehr nach erwarteter Wahrscheinlichkeit der Verwendung) okay, hat auch mit der Funktionseingruppierung zu tun).
Auf jeden Fall: Ein hochinteressantes Thema, bei dem wir sicher alle noch was lernen können.
Bernhard
Axel:
--- Zitat von: TMC am 04.03.05 - 20:08:36 ---Der ScriptSorter von der Sandbox sortiert mir die ScriptLibs dann noch bei Bedarf alphabetisch.
--- Ende Zitat ---
Hab' garnicht gewusst, dass es so ein Teil gibt. So was habe ich schon lange gesucht. Vielen Dank für den Tipp.
Ich habe mir das Teil mal runtergeladen und werde es mir mal anschauen.
--- Zitat von: koehlerbv am 04.03.05 - 20:10:47 ---Auf jeden Fall: Ein hochinteressantes Thema, bei dem wir sicher alle noch was lernen können.
--- Ende Zitat ---
Sehe ich auch so. Wäre doch auch was für die Best Practices, oder?
Axel
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln