Das Notes Forum
Domino 9 und frühere Versionen => ND9: Entwicklung => Thema gestartet von: FrankLU am 18.11.16 - 15:20:18
-
Hallo!
Ich habe weniger ein (für mich unlösbares) Problem als eine generelle Frage an die Profis:
Ich habe früher als Anfänger in der LS-Programmierung immer alle Variablen in der jeweiligen Funktion einer Script Library definiert. Irgendwann kam ich dann auf die Idee, Objekte und Variablen, die ich in vielen/allen Funktionen brauche, in den (Declarations)-Teil der Library zu packen. Soweit so gut.
Nun bin ich aber in der Situation, in einer Library "A" Funktionen aus einer zweiten Library "B" verwenden zu wollen, was aber zu Fehlern bei der Use-Funktion führt, weil namensgleiche Variablen und Objecte in beiden Librarys im (Declaration)-Teil definiert sind.
Wie löse ich das Problem am besten? Ändere ich alle doppelt vorkommenden Objekt- und Variablennamen in der "kleineren" Library "B" ab? Oder schreibe ich alle doppelten Deklarationen in die einzelnen Funktionen von "B"? Oder erstelle ich eine weitere Library "C", in der ich nur deklariere und diese Library "C" in "A" und "B" einbinde? Das "Transitive" aufzuheben, also "Private" Librarys zu haben, gibt es ja wohl nicht.
Wie macht ihr das? Verwendet Ihr "public names"?
Liebe Grüße aus der Pfalz
Frank
-
Heyho,
was spricht denn dagegen die Variablen "private" zu machen?
Dann sind die pro Bibliothek global verfügbar, überschreiben sich aber nicht mit gleichnamigen, privaten Variablen aus anderen Bibliotheken...
Gruß,
Mitch
-
Variablen global zu deklarieren, kann nach hinten losgehen.
Globale variablen in einer script lib sind auch nicht der Knaller, aber wenn man es halbwegs übersichtlich hält, dann geht das achon.
Ich persönlich nehme zunächst IMMER das option public aus winer neuen sceipt lib raus. Damit sind alle dort deklarierten Variablen ( auch die global definierten ) zunächst immer privat. D.H., sie sind innerhalb der script lib verwendbar und kollidieren nicht mit namensgleichen Deklarationen in anderen verwendeten libs.
Die methoden, klassen oder Properties, die ich lib übergreifend verwenden möchte, deklariere ich dann explizit als public.
-
Also prinzipiell verwende ich einige Variablen global, die ich wirklich immer wieder brauche, und die auch immer das selbe bedeuten (aktuelle Session, aktuelle Datenbank)... Das Problem: Bei einer globalen Variablen weiß man nie, ob nicht jemand in einer ganz anderen Routine den Wert der Variablen verändert...
-
mal so, mal so ;)
Meist versuche ich, ohne globale/public Variable auszukommen. Damit sind die in der ScriptLib enthaltenen Prozeduren/Funktionen maximal "gekapselt" und ich brauch' mir um nichts Sorgen zu machen. "Option Public" rausnehmen hilft da natürlich auch. Wenn ein gewisses Maß an Komplexität abzusehen ist, baue ich Klassen mit Methoden und Gettern/Settern.
Wann globale Variable? --> Wenn Performance Prio 1 ist. Ja, man muss aufpassen und ja, es ist (manchmal) nicht wirklich schön, aber man kann eben nicht alles haben ;)
Th.
-
Ich komme mit folgender Vorgehensweise gut zurecht:
Es handelt sich bei mit immer um Klassen die aneinander vererben. Es gibt eine Basisklasse mit vielen Standardvariablen (und Methoden) als Public. So wie Thorsten schon beschrieben hat für z.B. Session, Dokument, Datenbank usw.. Diese Variablen muss man so in den Unterklassen nicht immer neu definieren.
Mit der Zeit kommen zwar ein paar Variablen zusammen, allerdings erhält man direkt beim Schreiben im Designer Meldung, falls man mal versehentlich in einer Unterklasse eine Variable neu definieren will "Member declared in a parent class". Du musst dir halt nur eine vernünftige Vererbungsstruktur ausdenken.
-
Ich danke Euch sehr für die Ansichten und Meinungen!
Auf die Idee, das "Option Public" aus der Library herauszunehmen, bin ich natürlich nicht gekommen. Da war ich wohl etwas betriebsblind. ::)
Danke nochmals!
Grüße aus der Pfalz
Frank