Objektarchitektur-Konzept-Frage
-
Hi,
ich hab den Auftrag bekommen von meinem Chef, ein gutes Konzept zu entwerfen, welches wir einfach benutzen können für weitere Projekte.
Als erstes dachte ich da z. B. an COM oder Corba, jedoch diese sind einfach nicht ausgereift genug.
Jetzt bin ich schon seit geraumer Zeit am Skizzieren und am Planen, doch nichts relativ effektives kommt zu stande.
Nun meine Frage: Hat jemand schonmal ein gutes Objektarchitektur Konzept gemacht und mir einen Gedankenschub geben kann oder sonstige Ideen hat?
-
Hallo,
also von dieser Materie verstehe ich recht wenig, aber ich frage mich schon, ob du etwas "Ausgereifteres" auf die Beine stellen willst als CORBA oder COM, von denen es ja etliche Implementationen gibt die von Profis geschaffen wurden?
-
CarstenJ
Naja der Nachteil an CORBA ist, dass man zusätzliche Header benötigt und auch die stdlib, welche wir nicht benutzen können (höchstens eigene implementierungen). Und bei COM ist das Problem mit der Typsicherheit.
-
vielleicht wären eure Anforderungen ganz interessant...
-
Shade Of Mine
Wooops sorry, stimmt hätte ich doch besser dazu schreiben sollen:- Keine Standardlib darf benutzt werden (naja kann man sehen wie man will, ich hab einen eigenimplementierung der STL)
- Keine Zusatzlibs wie z.B. boost oder libsigc++, sowie API-Funktionen.
- Interface basierend
- Von jedem Interface soll man ein anderes Interface erstellen können
- Typsichere Interface erstellung (Also nicht so extrem unsicher wie bei COM)
- Typsichere Callbacks sollen ebenfalls möglich sein z.B. für ein ButtoninterfaceKlingt relativ stark nach CORBA und COM, jedoch die beiden können wir nicht benutzen.
-
Darf man fragen warum keine Libraries verwendet werden?
Schliesslich hättest du mit Sigc++ oder boost::signal bereits deine Typsicheren Callbacks.
und CORBA ist auch auch ne recht anständige Architektur.
Naja, was für Anwendungen erstellt ihr denn? uU ist .NET ne Möglichkeit?
-
Shade of Mine
Wir können keine zusätzlichen Libs verwenden, da unsere Programme eher für Bankautomaten und Kassen sind, also eigenständige Systeme die kein Betriebssystem haben.Kurz: Unsere Programme sind einfach nur Programme die beim Booten in den RAM geladen werden für eine Spezielle Anwendung z.B. Kontoauszüge und co.
Und deshalb müssen wir eine eigene STL Implementierung benutzen die eben ohne die C und C++ Standardlib läuft.
Ich weis, würden wir boost bzw. libsigc++ benutzen hätten wir Typsichere Callbacks, doch da unsere Programme für den Kommerziellen Zweck gedacht sind, können wir libsigc++ nicht benutzen (Lizenzen) und aus boost den code "extrahieren" wäre zu umständlich.
Falls du Ahnung von CORBA hast, könntest Du mir dann veraten bzw. ein kleines Beispiel geben wie man CORBA ohne die corba.h benutzt bzw. ohne die ganzen corba-Header und libs? Im Internet finde ich nichts ausschlaggebendes darüber.
-
nix da schrieb:
Falls du Ahnung von CORBA hast, könntest Du mir dann veraten bzw. ein kleines Beispiel geben wie man CORBA ohne die corba.h benutzt bzw. ohne die ganzen corba-Header und libs? Im Internet finde ich nichts ausschlaggebendes darüber.
Gar nicht. Da müsstest du sonst das Language-Mapping selbst implementieren. Außerdem bräuchtest du eine eigene Implementierung des General Inter ORB Protokolls, da du IIOP ja nicht verwenden könntest.
Das werdet ihr wohl kaum alles selbst implementieren können. Da würde ich dann doch eher mal schauen, ob es nicht eine (kommerzielle) CORBA-Implementation gibt, die euren Anforderungen genügt.
-
Irgendwie wusste ich, das eine eigene Implementierung von CORBA unmöglich ist...
Da wäre eine Eigenimplementierung von COM schon besser, doch da ist die Typsicherheit eine Frage der Fragen. Hm.
Irgendwelche anderen Vorschläge?
-
nix da schrieb:
Da wäre eine Eigenimplementierung von COM schon besser, doch da ist die Typsicherheit eine Frage der Fragen.
Was hast du eigentlich für ein Problem mit der Typsicherheit? Wenn du nicht die IDispatch-Schnittstelle verwendest, sondern direkt über die passenden Interfaces gehst, hast du doch eine ganz normale statische Typprüfung. Zumindest in C++.
Es zwingt dich ja keiner den Weg über void* zu gehen. Du kannst eine Funktionalität wie QueryInterface ja auch über eine Basisklasse lösen (so wie bei CORBA::Object). Um einen initialen Downcast wirst du aber nicht drum rumkommen. Der liegt in der Natur der Sache.