Domino 9 und frühere Versionen > Entwicklung
Wie kann ich eine Klasse sinnvoll aufbauen ?
animate:
--- Zitat von: TMC am 20.06.04 - 20:16:33 ---Hab hier mal den Code von Dir in eine R5 - DB kopiert (see attached)
--- Ende Zitat ---
ah, läuft. schon mal näher im Debugger angeschaut, was da abläuft?
im Prinzip sehr simpel.
beim Öffnen eines Notesdokuments erzeugst du ein Dokument, das Dokument erzeugt eine History, die History erzeugt einen HistoryEntry
nach dem Speichern sagt das Dokument zur History 'speicher dich', die gibt den Befehl an den HistoryEntry weiter und der schreibt die benötigten Informationen ins NotesDokument.
Jetzt die Erklärung, warum ich es geschickter finde, eine abstrakte HistoryEntry-Klasse und mehrere davon abgeleitete Klassen zu verwenden.
was passiert, wenn von uns eine dritte Art gefordert wird, eine Historie zu schreiben.
an meiner funktionierenden History-Klasse füge ich genau zwei Zeilen hinzu (switch/select - Statement)
und ich erstelle eine neue Klasse für die geforderte dritte Art.
Der Rest meiner Klassen bleibt auf jeden Fall unberührt und muss z.B. nicht nochmal getestet werden, was evtl der Fall bei nur einer Klasse wäre.
Wenn jetzt noch mehr History-Arten verlangt werden, kein Problem. Der Code bleibt klein und übersichtlich. Bei nur einer Klasse könnte es etwas unübersichtlich werden.
Eine Klasse für das alles wäre vollkommen ok gewesen, für sich ändernde Anforderungen aber vielleicht unflexibler als die Variante mit mehreren Klassen.
Ich hoffe, ihr versteht, was ich meine.
animate:
--- Zitat von: TMC am 20.06.04 - 20:28:58 ---Noch eine Grundsatzfrage zu Public / Private:
Man nehme eine ScriptLibrary:
Per Default steht dort in den Options "Option Public".
Wenn ich dort eine Function erstelle, ist diese öffentlich verfügbar, sprich wenn ich ein Use "MeineScriptLib" in einer Maske einbaue, habe ich Zugriff auf die Routine.
Wenn ich eine Sub/Function mit "Private Sub...." oder "Private Function..." einleite, dann kann ich darauf nur in der ScriptLib zugreifen.
So kenn ich das zumindest.
Jetzt würde mich interessieren wie das umgekehrt ist:
Wenn da kein "Option Public" steht, ist die ScriptLib gar nicht verfügbar? Muss dann da "Option Private" stehen oder ist ein fehlendes "Option Public" automatisch ein "Option Private" ? Was ist wenn dann eine Sub/Function mit "Public Sub..." eingeleitet wird, ist diese dann auch z.B. in einem Masken-Event verfügbar (obwohl in den ScriptLib-Options nix steht oder "Option Private") ?
Ich habe wohl grad den Fehler gemacht, "Option Public" in den Script Libs stehen zu lassen, als ich Thomas' Code hineinkopierte.... (bin mir aber nicht sicher ob das relevant ist...)
--- Ende Zitat ---
Wenn kein Option Public dasteht ist erstmal alles Private, also nur innerhalb des Moduls sichtbar.
Ich habe mir aus diversen Gründen angewöhnt, das Option Public aus ScriptBibliotheken rauszuschmeißen.
Wenn du das stehen lässt, ist das kein Problem, weil sowieso vor jeder Methode / jedem Attribut Private oder Public steht.
TMC:
--- Zitat von: Thomas Völk am 20.06.04 - 20:47:23 ---Wenn kein Option Public dasteht ist erstmal alles Private, also nur innerhalb des Moduls sichtbar.
Ich habe mir aus diversen Gründen angewöhnt, das Option Public aus ScriptBibliotheken rauszuscheißen.
Wenn du das stehen lässt, ist das kein Problem, weil sowieso vor jeder Methode / jedem Attribut Private oder Public steht.
--- Ende Zitat ---
Nun geht mir ein weiteres Licht auf :)
Ist imho auch ein Thema, was in den "Was ein Notes Entwickler immer beachten sollte" - Thread gut passt.... (natürlich dann mit Erklärung)
animate:
--- Zitat von: TMC am 20.06.04 - 20:41:46 ---Was mir gerade eben auffällt in Deinem Code, Thomas:
Rocky Oliver schreibt in seiner "Bible", das alle Klassen immer eine "Delete sub" enthalten sollen, die vermisse ich hier jetzt.
Ich kann allerdings mangels Know-how nicht abschätzen, wie wichtig das ist .......
--- Ende Zitat ---
die Methode dient zum Aufräumen.
warum er schreibt, dass man die unbedingt immer braucht, kann ich nicht so recht nachvollziehen.
Sowas braucht man z.B. wenn du bidirektionale Verbindungen zu anderen Objekten hast. Wenn dein Objekt zerstört wird, dann zeigen die Referenzen der anderen Objekte auf dieses Objekt ins Leere, deshalb ist es ratsam solche Verbindungen kurz vor dem Ableben zu lösen.
In unserem Fall sehe ich keine Notwendigkeit, irgendwas aufzuräumen
TMC:
--- Zitat von: Thomas Völk am 20.06.04 - 20:54:45 ---die Methode dient zum Aufräumen.
warum er schreibt, dass man die unbedingt immer braucht, kann ich nicht so recht nachvollziehen.
Sowas braucht man z.B. wenn du bidirektionale Verbindungen zu anderen Objekten hast. Wenn dein Objekt zerstört wird, dann zeigen die Referenzen der anderen Objekte auf dieses Objekt ins Leere, deshalb ist es ratsam solche Verbindungen kurz vor dem Ableben zu lösen.
In unserem Fall sehe ich keine Notwendigkeit, irgendwas aufzuräumen
--- Ende Zitat ---
Das von Dir hört sich plausibel an.
Rocky schreibt auch nur sehr allgemein und hat das Klassen-Kapitel seeehr kurz gehalten in seinem Buch.
Er schreibt: "(...) Your class requires 2 subs - New (used to create the class) and Delete (used to destroy the class and perform cleanup). (...) all classes should have a New sub and a Delete sub"
Dem Umfang der Bible entsprechend ist eh das Kap. "Creating LS Classes" imho sehr kurz gehalten (vielleicht 1 Seite Text, Rest ist Source Code), mir macht es den Anschein, als ob da schnell mal darüber hinweg gegangen wurde (obwohl das Buch selbst wirklich sehr gut ist).
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln