Domino 9 und frühere Versionen > Entwicklung

Wie kann ich eine Klasse sinnvoll aufbauen ?

<< < (3/41) > >>

animate:
ok.
vorneweg: als geschickt würde ich es empfinden, midestens zwei Klassen zu erstellen:
Klasse History
Klasse HistoryEntry

wobei HistoryEntry eine abstrakte Klasse ist und als Basisklasse für zwei andere Klassen dient:
Klasse RTFHistoryEntry
Klasse TextHistoryEntry

(abstrakte Klasse bedeutet, dass von dieser Klasse nie eine Instanz/ ein Objekt erzeugt wird. Basisklasse bedeutet, dass von ihr andere Klassen abgeleitet sind, die ihre Methoden und Attribute erben)

in der Praxis könnte das dann so aussehen, dass ein History-Objekt ermittelt, welcher Eintrag (Text oder RTF) erzeugt werden muss.
Das kann es z.B. anhand eines Feldwerts oder der Präsenz bzw. Absenz eines Felds im Notesdokument entscheiden.
Das History-Objekt erzeugt dann ein entsprechendes HistoryEntry-Objekt und übergibt diesem die Daten, die es enthalten soll.
Das HistoryEntry-Objekt kennt das Notesdokument und weiß, wie es sich ins darin verewigen muss (also entweder als RTF oder als Text).

animate:

--- Zitat von: TMC am 20.06.04 - 16:41:13 ---Wo es imho schon mal hängt ist, dass ich im Postopen-Event was in eine (in der Maske definierten) globalen Variable schreibe, worauf ich im Postsave wieder zugreifen will. Kann ich das in der Klasse machen oder muss ich das direkt im Postopen/Postsave machen?

--- Ende Zitat ---

Du kannst die Behandlung von Events, die von der Maske ausgelöst werden, an die Klasse delegieren (das steht auch in dem Artikel, den Bernhard anführt).

Stichwort 'On Event x From y Call z'

koehlerbv:
Ich würde das für den Anfang einfacher halten. EINE Klasse, und diese
- wird in den Declarations der Form instantiiert
- New löst entweder das Belegen der zu überwachenden Felder im Originalzustand aus oder es wird mit einer eigenen Methode der Klasse diese Belegung aufgerufen (auf jeden Fall: Ein Array der zu überwachenden Feldnamen wird an New übergeben)
- Ein Compare/Write History vergleicht und schreibt dann das History field.

Das Ganze kann man dann ja beliebig ausbauen  ;)

Bernhard

TMC:
Danke für Eure Tipps !


--- Zitat von: Thomas Völk am 20.06.04 - 17:23:41 ---wobei HistoryEntry eine abstrakte Klasse ist und als Basisklasse für zwei andere Klassen dient
--- Ende Zitat ---

Hab ich das so jetzt richtig verstanden?




Was mir da noch nicht klar ist:
Ich (bzw. der Postopen- oder Postsave - Event) kommuniziere nur mit der Klasse "History" ? Die in den anderen Klassen benötigten Dinge gebe ich intern dann entsprechend weiter?

animate:

--- Zitat von: Thomas Völk am 20.06.04 - 17:31:10 ---
--- Zitat von: TMC am 20.06.04 - 16:41:13 ---Wo es imho schon mal hängt ist, dass ich im Postopen-Event was in eine (in der Maske definierten) globalen Variable schreibe, worauf ich im Postsave wieder zugreifen will. Kann ich das in der Klasse machen oder muss ich das direkt im Postopen/Postsave machen?

--- Ende Zitat ---

Du kannst die Behandlung von Events, die von der Maske ausgelöst werden, an die Klasse delegieren (das steht auch in dem Artikel, den Bernhard anführt).

Stichwort 'On Event x From y Call z'

--- Ende Zitat ---

Hier als Beispiel dazu ein Ausschnitt aus einer Klasse
Im QueryOpen-Event des Dokuments wird ein Objekt dieser Klass erzeugt. Alle für mich interessanten Events, die danach ausgelöst werden, werden von diesem Objekt behandelt (das wird in dem Konstruktor (Sub New) festgelegt).

Public Class xyz
   Private m_udFrontendDoc As notesuiDocument
   Private m_docBackendDoc As notesDocument

   Sub New(udCurrentDoc As notesUIDocument)
%REM
------------------------------------------------------------------------------------------------------------------------
Author:      TV
Date:      23.10.2003
Description:   Ich initialisiere meine Attribute und sorge dafür, dass Events aus dem FrontendDocument
         durch mich bearbeitet werden.
Parameter:   udCurrentDoc: NotesUIDocument
            Das Frontend-Dokument, das die Agent-Informationen anzeigt
Return Value:   <Name, Datentyp und Erklärung des Rückgabewertes>
History:      
------------------------------------------------------------------------------------------------------------------------
%END REM   
      
      'Frontend-Dokument und zugehöriges Backend-Dokument besorgen
      Set m_udFrontendDoc = udCurrentDoc
      
      'Achtung! Das BackendDokument ist in normalen Masken erst im Postopen Event verfügbar!
      'In Dialogboxen kann es schon im QueryOpen Event verfügbar sein.
      Set m_docBackendDoc = udCurrentDoc.Document
      
      'auf Events des FrontendDokuments reagieren
      On Event Postopen From m_udFrontendDoc Call ProcessPostopen
      On Event Postrecalc From m_udFrontendDoc Call ProcessPostrecalc
      
      'Zeitgesteuerte Agenten suchen und dem Benutzer zur Auswahl anzeigen
      Call initAgentMap()   
      Call collectScheduledAgents
      Call m_docBackendDoc.ReplaceItemValue(ST_DEFI_AMGR_AvailableAgents, m_asScheduledAgents)
   End Sub

   Sub ProcessPostopen(Source As Notesuidocument)
%REM
------------------------------------------------------------------------------------------------------------------------
Author:      TV
Date:      23.10.2003
Description:   Ich aktualisiere das FrontendDokument
Parameter:   <Name, Datentyp und Erklärung des Übergabeparameters>
Return Value:   <Name, Datentyp und Erklärung des Rückgabewertes>
History:      
------------------------------------------------------------------------------------------------------------------------
%END REM
      Call m_udFrontendDoc.Refresh()
   End Sub

End Class

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln