Erweiterungen für Klasse "ApplicationHandler"

Hallo!
Wie könnte man am besten eine dynamische Erweiterung von eine Klasse mit "Erweiterungsklassen" aufbauen?
Beispiel:
Haupt-Klasse: ApplicationHandler ... Klasse für die Steuerung der Anwendung, die mit Access erstellt wird. Diese Klasse wird so ziemlich in jeder Access-Anwendung genutzt werden.
Erweiterungsklasse: ApplicationHandler_AppFile ... Klasse die als Aufgabe das Speichern von Dateien (Icon, Dll,...) in ein Tabelle übernimmt
Die AppFile-Klasse wird sicher nicht in jeder Access-Anwendung benötigt. somit darf in der Klasse ApplicationHandler nicht darauf referenziert werden.
Mein aktueller Lösungsweg:
Erst im Configurationsmodul werden die beiden Klassen verknüpft. Dabei wird der Erweiterungsklasse die Referenz zur ApplicationHandler-Instanz übergeben.
Die Hauptklasse löst an den Stellen, wo diese Erweiterungsklasse benötigt wird, ein Ereignis aus, auf das die Erweiterungsklasse reagiert.
Die Variante in der Hauptklasse für jede mögliche Erweiterung eine Objektvariable abzulegen, wäre zwar noch einfacher, da man dann nur prüfen müsste, ob die Objektvariable auf nothing steht.
Allerdings müsste man dann immer die Hauptklasse ändern, wenn eine Erweiterung dazu kommt.
Beim Konzept mit den Ereignissen würde es ausreichen, wenn man vorab an den interessanten Stellen entsprechende Ereignisse einbaut. Außerdem können sich an die Ereignisse mehrere Erweiterungen hängen, was bei der Variante mit der Objektvariable nicht möglich ist.
Beispiel:
1. Initialisierung im Konfigurationsmodul base/_config_Application_sample.bas
2. Bedarf in base/ApplicationHandler.cls
3. Ereignisbehandlung in der Erweiterung base/ApplicationHandler_AppFile.cls
Wie könnte man am besten eine dynamische Erweiterung von eine Klasse mit "Erweiterungsklassen" aufbauen?
Beispiel:
Haupt-Klasse: ApplicationHandler ... Klasse für die Steuerung der Anwendung, die mit Access erstellt wird. Diese Klasse wird so ziemlich in jeder Access-Anwendung genutzt werden.
Erweiterungsklasse: ApplicationHandler_AppFile ... Klasse die als Aufgabe das Speichern von Dateien (Icon, Dll,...) in ein Tabelle übernimmt
Die AppFile-Klasse wird sicher nicht in jeder Access-Anwendung benötigt. somit darf in der Klasse ApplicationHandler nicht darauf referenziert werden.
Mein aktueller Lösungsweg:
Erst im Configurationsmodul werden die beiden Klassen verknüpft. Dabei wird der Erweiterungsklasse die Referenz zur ApplicationHandler-Instanz übergeben.
Die Hauptklasse löst an den Stellen, wo diese Erweiterungsklasse benötigt wird, ein Ereignis aus, auf das die Erweiterungsklasse reagiert.
Die Variante in der Hauptklasse für jede mögliche Erweiterung eine Objektvariable abzulegen, wäre zwar noch einfacher, da man dann nur prüfen müsste, ob die Objektvariable auf nothing steht.
Allerdings müsste man dann immer die Hauptklasse ändern, wenn eine Erweiterung dazu kommt.
Beim Konzept mit den Ereignissen würde es ausreichen, wenn man vorab an den interessanten Stellen entsprechende Ereignisse einbaut. Außerdem können sich an die Ereignisse mehrere Erweiterungen hängen, was bei der Variante mit der Objektvariable nicht möglich ist.
Beispiel:
1. Initialisierung im Konfigurationsmodul base/_config_Application_sample.bas
- Code: Alles auswählen
Public Sub InitConfig(Optional oCurrentAppHandler As ApplicationHandler = Nothing)
...
modApplication.AddApplicationHandlerExtension New ApplicationHandler_AppFile
...
End Sub
2. Bedarf in base/ApplicationHandler.cls
- Code: Alles auswählen
Public Sub SetAppIcon(ByVal AppIconFile As String, Optional ByVal UseAppIconForFrmRpt As Boolean = True)
[...]
Else ' Datei nicht vorhanden => versuchen aus AppFile-Tabelle zu erzeugen:
'1. Prüfen ob AppFile-Erweiterung vorhanden ist
RaiseEvent CheckExtension(EXTENSION_KEY_AppFile, bolCheck)
If bolCheck Then
bolCheck = CreateAppFile("AppIcon", AppIconFile)
End If
[...]
End Sub
Public Function CreateAppFile(ByVal sFileID As String, ByVal sFileName As String) As Boolean
[...]
eventResumeMode = 0
RaiseEvent AppFileBeforeCreateFile(sFileID, sFileName, eventResumeMode, eventResumeMessage)
If eventResumeMode <> 0 Then
CreateAppFile = (eventResumeMode = ApplicationHandlerResumeModes.AppResumeMode_Completed)
Else
Err.Raise ApplicationHandlerErrors.AppErr_EventInterfaceMissing, _
"CreateAppFile", "Auf das AppFileBeforeCreateFile-Ereignis wurde nicht reagiert"
End If
End Function
3. Ereignisbehandlung in der Erweiterung base/ApplicationHandler_AppFile.cls
- Code: Alles auswählen
Private Sub m_ApplicationHandler_CheckExtension(ByVal sExtensionKey As String, exists As Boolean)
If sExtensionKey = m_EXTENSION_KEY Then exists = True
End Sub
Private Sub m_ApplicationHandler_AppFileBeforeSaveFile(ByVal sFileID As String, ByVal sFileName As String, ByVal saveVersion As Boolean, ByRef ResumeMode As ApplicationHandlerResumeModes, ByRef ResumeMessage As String)
If SaveAppFile(sFileID, sFileName, saveVersion) Then
ResumeMode = ApplicationHandlerResumeModes.AppResumeMode_Completed
Else 'Fehler rückmelden
ResumeMode = ApplicationHandlerResumeModes.AppResumeMode_Error
End If
End Sub