AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

class procedure, Singleton oder Instanz?

Ein Thema von stahli · begonnen am 21. Apr 2013 · letzter Beitrag vom 22. Apr 2013
 
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.351 Beiträge
 
Delphi 11 Alexandria
 
#1

class procedure, Singleton oder Instanz?

  Alt 21. Apr 2013, 17:43
Ich habe ein recht schwierig zu beschreibendes Problem.

Für mein Framework habe ich 2 Manager erstellt.

Zunächst einen BusinessLogic-Manager (BLManager), von dem im Projekt eine Instanz erzeugt werden soll.
Dieser erzeugt und verwaltet Businessobjekte in Listen und gibt die heraus.

Für die GUI-Controls gibt es einen GUI-Manager. Dieser wird ohne Instanziierung über Klassenfunktionen genutzt.
Die GUI-Controls melden sich bei Ihrer Erstellung (bzw. Laden der Formulare) dort an.

Der BLManager informiert den GUIManager über Änderungen. Der GUI-Manager beauftragt dann die Controls, sich neu zu zeichnen.

Das funktioniert wunderbar (bisher nur unter FMX), aber wenn ich Änderungen im Framework vornehme und das Package neu installiere, kann es zu Problemen kommen (Laufzeitfehler in IDE), wenn ich den BLManager im Mainform instanziiert habe. Führer ich die Instanziierung erst im OnCreate des Mainforms durch, dann gibt es das Problem nicht. Allerdings ist es natürlich schicker, eine BLManager-Komponente im Formular zu haben.

Bild 1 zeigt den Ablauf wenn kein Formular in der IDE geöffnet war und Bild 2 das Problem.

Ich habe nun mal untersucht, wo das Problem entsteht und die Abläufe der uses initialization und finalization sowie der class constructoren und class destructoren gelogt.
Wenn ein Formular in der IDE geöffnet ist oder war wurde ein BLManager instanziiert. Beim Installieren des Packages werden die Komponenten kurz entfernt und dann neu erzeugt.
Den zeitlichen Ablauf kann man ja nicht beeinflussen. Ich habe auch den Eindruck, dass die IDE seit XE sensibler auf das Installieren eines verwendeten Packages reagiert.

Ich habe schon einmal versucht, statt der statischen Klasse TssGUIManager ein Singleton zu verwenden. Das hat jedoch nichts verbessert.

Nun überlege ich, innerhalb einer TBLManager-Instanz eine TGUIManager-Instanz zu erzeugen. Diese würde dann mit aufgelöst, wenn der BLManager aufgelöst würde.
Die Listen, in denen sich die Controls registrieren müssten aber weitere über Klassenfunktionen erreichbar sein.

Der Vorteil der jetzigen Lösung ist, dass der GUIManager auch ohne Instanziierung funktioniert und eine Datenbindung der GUI-Controls sozusagen im Hintergrund ermöglicht.

Ich weiß, das ist ein schwer nachvollziehbares Problem, aber vielleicht hat ja jemand doch einen grundsätzlichen Rat?
Angehängte Grafiken
Dateityp: jpg log.jpg (240,6 KB, 36x aufgerufen)
Dateityp: jpg log-fehler.jpg (146,8 KB, 32x aufgerufen)
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz