Ich möchte jedoch eine elegante Architektur haben, die die folgenden Eigenschaften aufweist:
- Kapselung der betriebssystemabhängigen Funktionen zum Laden und Freigeben der Bibliothek
- Automatische Ressourcenverwaltung (Freigeben der DLL, wenn kein Zugriff mehr nötig ist).
- Bibliothek repräsentiert konkrete Objektausprägungen
Beim Entwurf einer Architektur habe ich mich am Factory Pattern orientiert und dabei ist die folgende Struktur herausgekommen:
http://www.imgbox.de/show/img/jQI5xvlqrj.jpg
Den Ablauf habe ich mir so vorgestellt:
1. Der Client ruft die statische SomeFactory::create Methode auf und übergibt den Namen der dynamischen Bibliothek (kurz: DL)
2. Für jede DL erzeugt die Factory eine DynamicLibraryLoader Instanz. Sollte man 2x auf die gleiche DL zugreifen wollen, wird der existierende Loader verwendet. Der Loader ist zur Kapselung der betriebbsystemspezifischen Funktionen zum Laden und Freigeben der DL gedacht.
3. Per Konvention wurde meinerseits festgelegt, dass die DL Dateien ebenfalls create und release Funktionen aufweisen müssen.
4. Über die getFunction Methode des Loader Objekts komme ich an einen Pointer auf die create-Funktion und kann mir nun eine Instanz der IRequestedClass Klasse erzeugen.
Auch wenn diese Architektur funktioniert, so gefallen mir einige Punkte nicht:
- Die Freigabe der IRequestedClass Objekte muss über die statische release Funktion erfolgen, da new und delete im Hauptprogramm überschrieben sein könnten.
- Ich reimplementiere den Referenzzähler der DL, damit ich weiß wann eine Bibliothek wieder freigegeben werden kann. Allerdings wird der Zähler zB beim Kopieren eines Objekts nicht angepasst.
- Die Factory wird vergleichsweise umfangreich, weil sie bei jedem release Aufruf überprüft, ob die DL freigegeben werden kann.
- Ich muss vorschreiben, dass es eine create und release Funktion in den DL Dateien gibt
Ist das Problem so trivial bzw. so nahe mit dem Factory Design Pattern verwandt, dass es kein eigenes Design Pattern für den Umgang mit dynamischen Bibliotheken gibt?
Und wie beurteilt ihr meinen Entwurf?
Grüße,
Vic
Zuletzt bearbeitet von _Vic_ am 11:47:12 31.01.2012, insgesamt 2-mal bearbeitet
Die Frage ist: Wie oft brauchst du das denn, dass es sich auszahlt das zu kapseln?
Wie oft wirst du diese Funktionalität denn wiederverwenden? Im Normalfall hast du doch vielleicht ein, zwei Systeme in einer Anwendung wo du sowas brauchst, die evtl. auch sehr unterschiedliche Anforderungen haben, was den Umgang mit den dynamischen Bibliotheken angeht. Ich würde mich lieber auf das Gesamtsystem konzentrieren, als mich an der Tasache festzubeißen dass man dabei drei betriebssystemabhängige Funktionen aufruft...
_________________ one point of view will never reveal the entire scene.
Nächstes Thema anzeigen Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums
für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de
Werbekostenerstattung verdient werden kann.
Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de
enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt
(vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in
privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden.
Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere
übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.