Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: Rund um die Programmierung ::  Design Pattern für dynamische Bibliotheken gesucht / Eigenen Entwurf bewerten     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
_Vic_
Mitglied

Benutzerprofil
Anmeldungsdatum: 13.03.2005
Beiträge: 55
Beitrag _Vic_ Mitglied 11:31:12 31.01.2012   Titel:   Design Pattern für dynamische Bibliotheken gesucht / Eigenen Entwurf bewerten            Zitieren

Hallo miteinander,

ich beschäftige mich derzeit mit dem Umgang mit dynamischen Bibliotheken und habe auch schon erste lauffähige Resultate erzielen können.
Allerdings stört es mich, dass ich kein echtes Design Pattern für diese Aufgabe gefunden habe. Viele HowTos zeigen einfach nur die technischen Aspekte zum Laden von dynamischen Bibliotheken und packen alles in eine main Funktion hinein. Hier zwei Beispiele:
http://www.faqs.org/docs/Linux-mini/C++-dlopen.html und
http://www.gamedev.net/page/resources/_/technical/game-programming/using-interfaces-with-dlls-r928

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
dot
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.05.2004
Beiträge: 3858
Beitrag dot Mitglied 14:04:54 31.01.2012   Titel:              Zitieren

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.
C/C++ Forum :: Rund um die Programmierung ::  Design Pattern für dynamische Bibliotheken gesucht / Eigenen Entwurf bewerten   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




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.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

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.