Autor Thema: Wie kann ich eine Klasse sinnvoll aufbauen ?  (Gelesen 123178 mal)

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Wie kann ich eine Klasse sinnvoll aufbauen ?
« Antwort #40 am: 20.06.04 - 21:10:34 »
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.

Hochinteressant.
Ich hab mir bisher mit meiner Subs/Function - orientierten Scribt-Lib immer wieder gedacht: Was kann ich noch verbessern.
Du hast es gerade gezeigt  ;)
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re:Wie kann ich eine Klasse sinnvoll aufbauen ?
« Antwort #41 am: 20.06.04 - 21:23:30 »
was findest du denn daran besser?
mit der alten Methode hats ja auch einwandfrei funktioniert.
was kann man noch verbessern?
« Letzte Änderung: 20.06.04 - 21:34:03 von Thomas Völk »
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Wie kann ich eine Klasse sinnvoll aufbauen ?
« Antwort #42 am: 20.06.04 - 21:33:57 »
was findest du denn daran besser?
mit der alten Methode hats ja auch einwandfrei funktioniert.

Gute Frage:
+ Weil ich damit nur noch Minimal-Code in den Masken-Events habe
+ besser wiederverwendbar (Copy&Play)
+ Wartung nur an 1 Stelle
+ Was ist wenn ich das auch noch den Querymodechange-Event einbinden muss (das wird so sein bei History: das Dok ist offen im Lesemodus, und User wechselt in Bearbeitungsmodus; ein Postopen-Code schlägt somit nicht zu); also selbe Zeile in Querymodechange und schon gefixt :-))

Meine ersten spontanen Eindrücke.....
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Wie kann ich eine Klasse sinnvoll aufbauen ?
« Antwort #43 am: 20.06.04 - 21:38:48 »
was kann man noch verbessern?

Kann ich Dir erst beantworten, wenn ich das in einer Test-DB eingesetzt habe. Wird heute leider nicht mehr sein.
Ist für mich nicht ganz trivial das ganze, ich muss es erstmal live gesehen haben :-)
Weiteres Feedback zum Code kommt also noch  ;)

**Nachtrag**
"On Event PostSave " war für mich hier auch neu, kannte ich noch gar nicht, ist sehr interessant.
« Letzte Änderung: 20.06.04 - 21:45:01 von TMC »
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Wie kann ich eine Klasse sinnvoll aufbauen ?
« Antwort #44 am: 21.06.04 - 22:24:09 »
Hab mal noch die im Code verwendeten Felder in der Maske ergänzt und ein paar Msgboxes ergänzt.


Generell erscheint mir trotz logischen Aufbau das Konstrukt mit den 4 Beispielklassen noch sehr komplex. Aber das sind wohl die Anfangsschwierigkeiten  ::)
« Letzte Änderung: 21.06.04 - 22:38:42 von TMC »
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re:Wie kann ich eine Klasse sinnvoll aufbauen ?
« Antwort #45 am: 21.06.04 - 22:53:18 »
bei Fragen oder Problemen einfach nachhaken...
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Wie kann ich eine Klasse sinnvoll aufbauen ?
« Antwort #46 am: 21.06.04 - 23:10:41 »
Generelle Frage zu Klassen:

Angenommen ich habe eine Array-Script-Lib. Spricht was dagegen die dort verwendeten Subs und Functions in Klassen zu verwenden?
Klar - ich meine wenn man in der Array-Lib was gravierendes ändert (z.B. Rückgabewert einer Function plötzlich anderer Datentyp, etc.etc.) dann zerlegt es alles.

Ist mehr eine generelle Frage..... Ich denke ich werde in Klassen auch bewährte Functions verwenden. Und die würd ich dann auch nach wie vor zentral irgendwo vorhalten wollen.
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Wie kann ich eine Klasse sinnvoll aufbauen ?
« Antwort #47 am: 21.06.04 - 23:14:14 »
IMHO: Dagegen spricht überhaupt gar nichts - ganz im Gegenteil.
Zitat
wenn man in der Array-Lib was gravierendes ändert (z.B. Rückgabewert einer Function plötzlich anderer Datentyp, etc.etc.) dann zerlegt es alles
Das tut es immer, Matthias - egal, ob in Classes oder "normalen" Functions oder Subs  ;)

Bernhard

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Wie kann ich eine Klasse sinnvoll aufbauen ?
« Antwort #48 am: 21.06.04 - 23:15:54 »
Noch was generelles: Vermeidung rekursiver Aufruf:

Ich habe schon öfter mal gelesen, dass man bei ScriptLibs aufpassen muss, diese nicht mehrfach aufzurufen.
Als Tipp habe ich da u.a. gelesen, mann soll eine Globale Library erstellen ("GlobalLib"), und darin nur alle anderen Libs einbinden die man braucht in Masken etc. In Masken etc. schreibt man dann nur - Use "GlobalLib" - , was damit dann alles eingebunden wird, steuert man über die GlobalLib.

Ist das so praktikabel und sinnvoll? Da würde mich Eure Meinung zu interessieren.
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Wie kann ich eine Klasse sinnvoll aufbauen ?
« Antwort #49 am: 21.06.04 - 23:25:38 »
Das geht bei wenigen und kleinen Libs. Da sollte es aber auch keine Probleme geben, das "circular use" zu vermeiden.
Ich würde von diesem "Tipp" also die Finger lassen (meine persönliche Meinung). Solch eine GlobalLib pumpt immer allen Code beim Laden eines Designelements in dieses mit hinein.
Ich fahre m.E. erheblich besser, in dem ich die Libs entsprechend sinnvoll aufbaue, damit ich dann genau die Libs einbinden kann, die ich auch wirklich brauche. Diese versuche ich - wenn irgendwie machbar - so aufzubauen, dass es folgende Typen von ScriptLibs gibt:
- Basic (was man in jeder Applikation gebrauchen kann. So sparsam wie möglich aufgebaut, ggf. nochmals unterteilen !)
- Applikationsart-spezifisch (wenn es mehrere ähnliche Apps gibt)
- Applikationsspezifisch (wird nur in dieser App gebraucht)

Bernhard

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Wie kann ich eine Klasse sinnvoll aufbauen ?
« Antwort #50 am: 21.06.04 - 23:30:05 »
Hört sich sinnvoll an, Bernhard.

Ich hatte ja bisher noch nie riesengroße Libs in meinen DB's. Aber wo ich wirklich warten musste (Sekundenbereich) beim öffnen eines Doks, war, als ich mit Normunds' RTLib experimentierte. Diese mächtige Lib sollte man wirklich mit Bedacht laden :-)
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Wie kann ich eine Klasse sinnvoll aufbauen ?
« Antwort #51 am: 21.06.04 - 23:37:38 »
Eben. Normunds Kalbernzins kann dagegen ja kaum was machen, und der Sinn der Lib erlaubt m.E. in der Regel auch lange Wartezeiten.
Aber unsereiner hat da viel mehr Möglichkeiten. Und die Aufteilung der Libs in sinnvolle, miteinander kooperierende Einheiten ist oft eine viel herausforderende Aufgabe als das Schreiben der Module selber. Und "eigentlich" sollte das "Gerüst" und seine Abhängigkeiten vor der ersten LOC feststehen. "Eigentlich"  ;D

Bernhard

Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re:Wie kann ich eine Klasse sinnvoll aufbauen ?
« Antwort #52 am: 22.06.04 - 07:07:44 »
Generelle Frage zu Klassen:

Angenommen ich habe eine Array-Script-Lib. Spricht was dagegen die dort verwendeten Subs und Functions in Klassen zu verwenden?
Klar - ich meine wenn man in der Array-Lib was gravierendes ändert (z.B. Rückgabewert einer Function plötzlich anderer Datentyp, etc.etc.) dann zerlegt es alles.

Ist mehr eine generelle Frage..... Ich denke ich werde in Klassen auch bewährte Functions verwenden. Und die würd ich dann auch nach wie vor zentral irgendwo vorhalten wollen.

in Java z.B. werden solche Funktionen in "Utility-Klassen" gehalten.
Da gibts z.B. die Klasse 'Math', die stellt Rechenfunktionen zur Verfügung.
Die Methoden der Klasse sind statisch (d.h. sie können aufgerufen werden, ohne ein Objekt der Klasse instantiieren zu müssen.) In LS gibt es keine statischen Methoden, deswegen ist es vermutlich geschickter, solche Hilfsfunktionen wie bisher als alleinstehende Funktionen in Scriptbibliotheken zu halten.

Für das Problem, wie man diese Bibliotheken strukturiert und welche Bibliotheken am besten welche anderen Bibliotheken nutzen, ohne ein "illegal circular use" zu erzeugen, habe ich leider kein Patentrezept. Wie man das macht, ist wohl von Anwendung zu Anwendung verschieden und hängt auch, wie Bernhard sagt, von der Anzahl der Bibliotheken ab.
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:Wie kann ich eine Klasse sinnvoll aufbauen ?
« Antwort #53 am: 22.06.04 - 13:39:09 »
... generell gilt aber - nur laden, was auch tasächlich benötigt wird. Alles andere ist Ballast der auf die Performance drückt. Eher überlegen, wo ich den Code brauche...

... nur in einer einzigen Aktion oder in mehreren Aktion - entsprechend eben dann global oder lokal laden...

... oder den Code in Textdokumenten mit Lesezugriff verwalten und dann nur zur Ausführung laden und ausführen...

ata
Grüßle Toni :)

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re:Wie kann ich eine Klasse sinnvoll aufbauen ?
« Antwort #54 am: 23.06.04 - 08:26:23 »
... oder den Code in Textdokumenten mit Lesezugriff verwalten und dann nur zur Ausführung laden und ausführen...


Hi,

so was suche ich schon länger. Kannst du mal erklären wie man so was macht.

Ich hab's mal versucht, bin aber immer gescheitert.


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline Markus Henke

  • Aktives Mitglied
  • ***
  • Beiträge: 143
  • Geschlecht: Männlich
Re:Wie kann ich eine Klasse sinnvoll aufbauen ?
« Antwort #55 am: 23.06.04 - 09:00:55 »
Ata, habe ich das richtig verstanden, dass Duu zum Teil Code in Dokumenten speicherst, anstatt ihn im Design zu haben? Das hört sich interessant an, was ist der Vorteil davon?

Markus

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:Wie kann ich eine Klasse sinnvoll aufbauen ?
« Antwort #56 am: 23.06.04 - 22:59:33 »
... das hat Vorteile, aber auch Nachteile...
Ich habe die Technik in meiner Support-Datenbank eingebaut. Damit lassen sich per Schlagwort dann verschiedene "Aktions-Bündel" zur Verfügung stellen.

Vorteile:
Mit normalen Notes-Mitteln kannst du bestimmen, wer den Code verändern kann, wer verwenden...
Mit einer kleinen Erweiterung eines Popup's kann man damit Aktionen an beliebiger Stelle zur Verfügung stellen. Einmal programmiert, an allen erreichbaren Stellen verwendbar...
Man kann auf ScriptLibraries der aktuellen Datenbank zugreifen.
Es lassen sich auch externe ".lss"-Dateien einbinden - damit keine 65K-Grenze...


Nachteile:
Als Entwicklerplattform bietet es zunächst keinerlei Komfort, da überlicherweise Notepad verwendet wird.
Dies lässt sich umgehen, wenn man die Dateien explicit auslagert und als ".lss" mit einem bestimmten Programm bearbeiten lässt. Hat dann aber die Nachteile, daß der Code vor Ort zur Verfügung stehen muss...
Debugging ist bei weitem nicht so komfortabel. Es kommt eine Fehlermeldung, die in der Regel hilfreich ist, wenn aber dein Code sehr umfangreich ist, dann solltest du einen Texteditor verwenden, der dir die Zeilennummer anzeigt, oder entsprechenden Debugging-Code einbauen...

@Axel:
Der Weg ist eigentlich ganz simpel:
Execute( |MsgBox("Hallole")| )

Das Geheimnis ist, das alle Objekte innerhalb des Execute's deklariert und initialisiert werden müssen. Wenn du etwas Geduld hast, dann zeig ich's in einer kleinen Demo-DB...

ata
Grüßle Toni :)

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:Wie kann ich eine Klasse sinnvoll aufbauen ?
« Antwort #57 am: 24.06.04 - 00:05:41 »
... zur Demo reicht es heute nicht mehr - aber zu einer kleinen Anleitung:

Code
' # ###################################################
%REM
ata - 23.06.2004
In dieser kleinen Demo möchte ich zeigen, wie
Text als LS-Code ausgeführt werden kann.
Als Beispiel verwende ich 
... Globale Variablen
... Globale Funktionen
... normaler Code
'
Was für einen Wert gibt in diesem Beispiel die MsgBox zurück?
Die Rückgabe erscheint in der Statuszeile...
'
Man benötigt 
... ein Feld "Code"
... ein Event - zum Beispiel eine Schaltfläche
'
Als Schaltflächen-Code zur Ausführung dient:
'
Sub Click(Source As Button)
   Dim ws As New NotesUIWorkspace
   Dim docThis As NotesDocument
   Set docThis = ws.CurrentDocument.Document
   If docTHis.Code(0) <> "" Then
      vCode = docThis.Code
      sCode = ""
      For i = 0 To Ubound( docThis.Code )
         sCode = sCode + vCode( i ) + Chr(10)
      Next
      Execute( sCode )
   End If
End Sub
'
Das Feld "Code" ist ein Mehrfachwerte-Feld
... Mehrere Werte werden nur mit neuen Zeilen getrennt
%END REM
' # ###################################################
' # ... im Feld "Code" kann dann der folgende Code verwendet werden....
' 
' # Globale Deklarationen
Option Explicit
' Use "Deine LS-Library"
' %INCLUDE "C:\Temp\deineLSS-Datei.lss" ' lässt sich auch später noch einbauen...
Dim sPos As String
'
' ... dann lassen sich Klassen, Type's und Funktionen einbauen
Function makeMsg(  sText As String , iTyp As Integer ) As Integer
   sPos = "Sub makeMsg."
   On Error Goto ErrorHandle ' # innerhalb von Sub's und Function's sind Sprunmarken möglich
   makeMsg = MsgBox( "Ausgabe: " + sText , iTyp , "Ausgabe einer Meldung" )
Exit Function
'
ErrorHandle:
   Print "Fehler: " + sPos + Cstr( Erl )+ " - " + Error 
   Resume Next
End Function
'
' # ... letztendlich dann der eigentliche Code, der ausgeführt werden soll - hier sind keine Sprungmarken (GoTo) möglich...
Dim sText As String
Dim res As Integer
sText = "Hallole"
res = makeMsg( sText , 2  )
'
Print res

... der obige Code kann komplett in das Feld "Code" kopiert werden.
Mit der Schaltfläche wird dann der Code ausgeführt...

... es liese sich auch ein Rich-Text-Feld in der Maske plazieren, in der dann ein Button eingefügt wird. Als Code dient dann der "Click()"-Code aus dem Beispiel...

... und es gibt noch viel weitere Spielarten... ;D ;D ;D

ata
Grüßle Toni :)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Wie kann ich eine Klasse sinnvoll aufbauen ?
« Antwort #58 am: 24.06.04 - 00:15:02 »
Danke, Anton, dass Du eine Lanze gebrochen hast für dieses hochwirksame LS-Statement. Das sollte eigentlich auch ein BP-Artikel wert sein ... Wir sollten das vielleicht im BP-Diskussionsforum weiter diskutieren.

Bernhard

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:Wie kann ich eine Klasse sinnvoll aufbauen ?
« Antwort #59 am: 24.06.04 - 00:17:16 »
... wenn du meinst...

Toni  ;D
Grüßle Toni :)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz