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

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 #120 am: 28.06.04 - 14:55:13 »
Axel, ich glaube, wir meinen mit der Größe etwas anderes.

Entscheidend ist, dass nur eine begrenzte Menge Text in ein Textfeld geschrieben werden kann.

Jeder History-Eintrag (repräsentiert durch ein HistoryEntry-Objekt) besitzt eine gewisse Textgröße, die man leicht durch die Anzahl der Zeichen ausrechnen kann.
Die Summe der Größen aller Einträge darf einen gegebenen Maximalwert nicht überschreiten, deshalb muss ich das vor dem Schreiben ins Dokument überprüfen.

Und dazu würde ich der Klasse HistoryEntry ein Attribut "Größe" oder "Size", etc. verpassen, das ich abfragen kann.
Wo hast du denn Schwierigkeiten, uns zu folgen?
Ich versuche, heut abend mal ein Diagramm zu malen, vielleicht wirds dann einfacher.
Thomas

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

Marinero Atlántico

  • Gast
Re:Wie kann ich eine Klasse sinnvoll aufbauen ?
« Antwort #121 am: 28.06.04 - 15:52:48 »
Zeitfrage
Bezogen auf dein 1. Diagramm
History ist Creator (Larmann-GRASP) der HistoryEntries.
Es hält eine sortierte Collection der HistoryEntries.  
Es sollte deshalb der Experte für die aggregierte Größe der HistoryEntries sein.
Möglicherweise sollte es diese Information nicht als Membervariable halten, sondern über eine Methode jedesmal neu errechnen.
Vielleicht aber doch als Membervariable.
Wenn ich mich recht erinnere hat man mit diesem Wissen schon 5-8% von IBM 486  ;D

(Dinge wie Larman-GRASP sind auswendig gelerntes Zeugs und soll niemanden abschrecken).
« Letzte Änderung: 28.06.04 - 16:01:44 von Marinero Atlántico »

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 #122 am: 28.06.04 - 16:10:25 »
Zeitfrage
Bezogen auf dein 1. Diagramm
History ist Creator (Larmann-GRASP) der HistoryEntries.
Es hält eine sortierte Collection der HistoryEntries.  
Es sollte deshalb der Experte für die aggregierte Größe der HistoryEntries sein.
Möglicherweise sollte es diese Information nicht als Membervariable halten, sondern über eine Methode jedesmal neu errechnen.
Vielleicht aber doch als Membervariable.

gute Frage. Muss die History die Größe aller aktuellen Entries überhaupt kennen?

das Problem ist, dass wenn ein neuer Eintrag dazukommt, muss ich evtl. einen alten rausschmeißen (oder auch mehrere).
Dazu (habe ich vorgeschlagen) gibt es in der History eine Methode, die ermittelt, welche Einträge geschrieben werden sollen, indem die Methode die Einträge nach der Reihe fragt, wie groß sie sind und dann bei Erreichen der Maximalgröße den Hahn dichtmacht, in dem sie z.B. die überzähligen Einträge aus der Collection entfernt.
Falls nötig, können wir auch eine öffentliche Methode machen, die die Gesamtgröße ermittelt, indem sie wiederum bei, diesmal allen, Einträgen die Größe erfragt, summiert und dem Aufrufer zurückgibt. Also dynamisch, so wie du vorgeschlagen hast. Geht aber auch als Membervariable, die genauso berechnet wird, dann halt immer, wenn sich was an der Collection ändert.

Zitat
Wenn ich mich recht erinnere hat man mit diesem Wissen schon 5-8% von IBM 486  ;D
nicht schlecht. wieviel fehlt uns dann noch zum Bestehen?

gut, dass du mitdiskutierst.
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 #123 am: 28.06.04 - 22:03:27 »
Ich habe jetzt mal doch eine Function geschrieben  ;D :P

Code
Public Function AuxSize(vaSource As Variant, strNewEntry As String, iMaxSizeBytes As Integer, iMaxSizeEntries As Integer) As Variant
   
   On Error Goto ERRORHANDLER
   Dim i As Integer
   Dim j As Integer
   Dim iStart As Integer
   Dim iEnd As Integer
   Dim iAmount As Integer
   Dim iSize As Integer
   Dim iStartNew As Integer
   Dim vaNewValues() As Variant
   
   If  ( Isscalar(vaSource) ) Or ( vaSource(Lbound(vaSource)) = "" ) Then
      Redim vaNewValues(0)
      vaNewValues(0) = strNewEntry
      AuxSize = vaNewValues
      Goto EXITSCRIPT
   End If
   
   iStart = Lbound(vaSource)
   iEnd = Ubound(vaSource) + 1
   '----> Neuen Eintrag dem Array anhängen
   Redim Preserve vaSource(iStart To iEnd) 
   vaSource(iEnd) = strNewEntry
   '<---
   '---> Prüfe wieviele Einträge möglich sind
   iAmount = 0
   'Als erstes ermitteln wir die Anzahl möglicher Einträge anhand der Bytes
   'Als Ergebnis haben wir die Anzahl Einträge in "iAmount"
   For i = iEnd To iStart Step -1
      iSize = iSize + Len(vaSource(i))
      If iSize >  iMaxSizeBytes Then
      'Die Byte-Größe wurde überschritten         
         Exit For 'Schleife verlassen
      Else
         iAmount = iAmount + 1
      End If      
   Next
   'Nun prüfen wir ob die Anzahl erlaubter Einträge dadurch nicht überschritten wird
   If iAmount  > iMaxSizeEntries Then
      iAmount = iMaxSizeEntries
   End If
   
   '---> Jetzt stellen wir das neue Ziel-Array zusammen
   Redim vaNewValues(0 To iAmount-1)
   For j = 0 To iAmount-1
      '--> Wenn das History-Array kleiner wie die max. erlaubte Anzahl-1; starte bei 0;
           'sonst starten wir bei der Differenz (History-Array-Ende - Max.erlaubteAnz. + 1)
      If (iEnd <= iAmount -1 )  Then
         iStartNew = 0
      Else
         iStartNew = iEnd - iAmount + 1
      End If
      '<--
      vaNewValues(j) = vaSource(iStartNew + j)
   Next
   '<---
   AuxSize = vaNewValues
   
   
EXITSCRIPT:
   Exit Function
ERRORHANDLER:
   Call AuxErrorHandler("History ScriptLibrary: Function AuxSize")
   Resume EXITSCRIPT   
End Function

Was macht die Function:

Man kippt folgendes rein:
 - Item-Inhalt des History-Feldes (Variant Array)
 -  neuen Eintrag (str), den wir hinzufügen möchten
 - die maximale Anzahl Bytes die wir zulassen für ein Textfeld
 - die maximale Anzahl Einträge, die das History-Feld haben darf

Zurück bekommt man dann ein Array, welches entsprechend bereinigt ist und man dann direkt ins History-Textfeld setzen kann.

Die Function habe ich geschrieben, um zu zeigen was wir machen müssen.
Nun sollte imho der nächste Step sein, diese Logik via Klassen abzubilden.
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 #124 am: 28.06.04 - 22:23:42 »
Hier noch ein Update der Test-DB zum testen der Function

http://217.160.137.156/user/bp/tmc/_threaduploads/history/history_03.zip (40 KB)



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 #125 am: 28.06.04 - 22:51:24 »
Was übrigens auch noch sehr unsauber ist, ist die Abfrage ob es sich um ein neues Dok handelt.

Wenn es ein neues uidoc ist, dann soll ja nix überwacht werden, beim speichern soll nur irgend ein Vorgabetext (z.B. "Neues Dok erstellt.") in die History geschrieben werden.
Wie würde man das am saubersten handeln? Aktuell haben wir ja in der HistoryMain - Klasse nur ein Backend-Doc, aber kein Frontend-Doc (und somit da keine uidoc.isnewdoc - Abfragemöglichkeit).
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 #126 am: 28.06.04 - 23:44:16 »
Ich habe jetzt mal doch eine Function geschrieben  ;D :P

...

Die Function habe ich geschrieben, um zu zeigen was wir machen müssen.
Nun sollte imho der nächste Step sein, diese Logik via Klassen abzubilden.

*edit* Datenbank hängt ein paar posts weiter unten


ich hab mal wieder ganz schnell was gemacht
ungefähr so, wie ich mir das vorgestellt habe (ungefähr).

Ähem, leider null kommentiert, erklärt, etc. Hüstel.
Und auch nicht kenntlich gemacht, wo ich was geändert habe.
Deswegen schreib ichs hier schnell mal auf

Klasse HistoryEntry
neu:
Property Get Size
Sub readFromDoc
verändert:
Property Set Action

Klasse HistoryMain
neu:
Const MAX_SIZE
Attribut m_HistoryEntries()
Sub initEntries()
Sub clear()
Function getMaxEntries()

verändert:
Sub new()
Sub save() (nur ne Messagebox)
Sub write

Viel Spaß ;D

*edit* da fehlt übrigens noch ein bisschen was, das mach ich noch. Funktionieren tuts schon mal, zumindest oberflächlich
« Letzte Änderung: 29.06.04 - 19:25:49 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 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 #127 am: 28.06.04 - 23:51:10 »
Was übrigens auch noch sehr unsauber ist, ist die Abfrage ob es sich um ein neues Dok handelt.

Wenn es ein neues uidoc ist, dann soll ja nix überwacht werden, beim speichern soll nur irgend ein Vorgabetext (z.B. "Neues Dok erstellt.") in die History geschrieben werden.
Wie würde man das am saubersten handeln? Aktuell haben wir ja in der HistoryMain - Klasse nur ein Backend-Doc, aber kein Frontend-Doc (und somit da keine uidoc.isnewdoc - Abfragemöglichkeit).

aber NotesDocument.isNewNote
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 #128 am: 28.06.04 - 23:55:22 »
aber NotesDocument.isNewNote

ups, stimmt  :D

Na dann sollte es nicht weiter schwierig sein  :)
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 #129 am: 28.06.04 - 23:56:21 »

*edit* da fehlt übrigens noch ein bisschen was, das mach ich noch. Funktionieren tuts schon mal, zumindest oberflächlich

was fehlt noch?

wenn nicht alle Entries geschrieben werden, dann wird die Anzahl der Entries (Membervariable m_EntryCount) nicht aktualisiert.
Und der Array, der die Entries hält wird auch nicht angepasst.
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 #130 am: 28.06.04 - 23:59:05 »
ich hab mal wieder ganz schnell was gemacht
ungefähr so, wie ich mir das vorgestellt habe (ungefähr).

Cool, danke.
Funktioniert auf den ersten Test hin.

Eine Bitte:
Hab gerade gesehen, dass Du Boolean als Datentyp verwendest, denn es leider erst ab R6 gibt. Vielleicht kannst Du den noch zu Integer oder so machen....

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 #131 am: 29.06.04 - 00:09:09 »
ich versuche, nächstes Mal daran zu denken
Thomas

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

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 #132 am: 29.06.04 - 00:11:47 »
History ist Creator (Larmann-GRASP) der HistoryEntries.
Es hält eine sortierte Collection der HistoryEntries.  
Es sollte deshalb der Experte für die aggregierte Größe der HistoryEntries sein.

das ist genau der Punkt.
Die History ist der Experte für die aggregierte Größe der HistoryEntries sein.
das hätte niemand anders besser ausdrücken können.
Thomas

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

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 #133 am: 29.06.04 - 00:17:19 »


ich hab mal wieder ganz schnell was gemacht
ungefähr so, wie ich mir das vorgestellt habe (ungefähr).

Ähem, leider null kommentiert, erklärt, etc. Hüstel.
Und auch nicht kenntlich gemacht, wo ich was geändert habe.

das ist das Problem, wenn ich was schnell mache.
da ist irgendwo noch ein dicker Fehler.
der erste History-Eintrag wird irgendwie mit dem zweiten überschrieben
bin zu müde, um zu debuggen. mach ich morgen (oder im Lauf der Woche)
wichtig ist aber, dass das Prinzip klar wird.
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 #134 am: 29.06.04 - 00:21:10 »


ich hab mal wieder ganz schnell was gemacht
ungefähr so, wie ich mir das vorgestellt habe (ungefähr).

Ähem, leider null kommentiert, erklärt, etc. Hüstel.
Und auch nicht kenntlich gemacht, wo ich was geändert habe.

das ist das Problem, wenn ich was schnell mache.
da ist irgendwo noch ein dicker Fehler.
der erste History-Eintrag wird irgendwie mit dem zweiten überschrieben
bin zu müde, um zu debuggen. mach ich morgen (oder im Lauf der Woche)
wichtig ist aber, dass das Prinzip klar wird.

Geht wohl jedem so :-)
Kann ich mir auch ansehen (aber eben auch nicht mehr heute...)

Das Prinzip zeigst Du damit prima.

Wir haben auch noch ein paar andere Bugs drin (stammen aber von mir; z.B.: Neues Dok, 3mal speichern ohne zu schließen: es wird jeweils eine Zeile "New doc created" angelegt). Werde die auch noch ausbügeln.
« Letzte Änderung: 29.06.04 - 00:23:19 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 #135 am: 29.06.04 - 19:24:58 »
Bug weg.
Boolean weg.
Kommentare da
« Letzte Änderung: 29.06.04 - 20:52:58 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 #136 am: 29.06.04 - 20:06:42 »
Danke Thomas.

Habe in der angehängten DB die ns5 kurz angesehen.
Kann es sein dass Du noch einen älteren Stand angehängt hast?

Auf den ersten Blick ist wohl Bug weg, aber Boolean ist noch da (History Main Klasse, Zeile 26). Oder einfach übersehen? Kann ich aber auch rausnehmen, no problem...

Ich warte jetzt lieber noch mit dem weiteren anschauen, nicht dass Du noch einen anderen Stand hast  ;)
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 #137 am: 29.06.04 - 20:54:45 »
oh, ich hatte nach "boolean" gesucht, aber nix gefunden.
habs ausgebessert.

der Stand ist der, den du mal gepostet hast (history02.nsf).
nicht der letzte von dir.
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 #138 am: 29.06.04 - 21:49:30 »
Ah. ok.

Ich habe jetzt Deine Version 02 genommen, und meine Bugs ausgebessert.

Außerdem noch die maximale Anzahl Einträge eingebaut (steht in global Declarations der Maske, im Beispiel "4") in der Function getMaxEntries der HistoryMain - Klasse.

Hier also der aktuelle Stand:
http://217.160.137.156/user/bp/tmc/_threaduploads/history/history_04.zip
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 #139 am: 29.06.04 - 22:03:31 »
so ein Mist. Ich hatte alle miene Änderungen im Nachhinein kommentiert, aber irgendwie scheinbar nicht abgespeichert. Schade.
Vielleicht kann ich mich morgen nochmal dazu aufraffen.
Na ja, du hast es scheinbar auch ohne Kommentare gecheckt.
Thomas

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

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz