Modularer Programmentwurf
-
Hallo Leute,
kann mir mal jemand ein paar Tipps geben, wie man ein Programm möglichst richtig modular aufsetzt. D.h. Es gibt nur eine Kernapplikation die dann verschiedene Module (vielleicht in dll´s) verwaltet. Die Module sollen alle eigene Oberflächen und Funktionen mitbringen, aber miteinander kommunizieren können.
Also zum Beispiel: Modul 1: Kernanwendung (Datenbank)
Modul 2: Kundenverwaltung
Modul 3: Berichterstellung
Modul 4: Datenexport
usw.Man soll also Module nachliefern können ohne das Hauptprogramm zu verändern. Sicherlich ist es etwas aufwendig sich die Schnittstellen auszudenken, aber dafür wird man mit grosser Flexibilität belohnt.
Sicherlich gibts sowas schon irgendwo oder???
Thx
MfG Torsten
-
Ja, sowas gibt es schon.
Und zwar in Form einer MySQL Datenbank.
Wenn du die als Kernapplikation/Modul1 durchgehen lässt, hast du schonmal das genormte Interface (SQL-Statements). Außerdem den Vorteil, dass die Datenbank auf einem anderen Rechner im Internet/Lan liegen kann.Da deine Clients ja eh ein jeweils eigenes UserInterface mitbringen sollen, solltest du statt DLLs lieber viele kleine EXEs schreiben.
Lediglich das "untereinander kommunizieren" bliebe bei diesem Konzept auf der Strecke, da es bei MySQL AFAIK keine Benachrichtigung bei Änderung der Datenbank gibt.
-
ähm, ich glaub er meint das etwas anders.
was TorstenM braucht ist eine vorgehensweise um sein Projekt zu strukturieren.
Die Module sollen alle eigene Oberflächen und Funktionen mitbringen, aber miteinander kommunizieren können.
das ist schlecht, da dann alle Module von einander abhängig sind. Wir bastel uns ein Controller, der die Anwendung steuert. Nur dieser Controller kennt alle Module, weil nur dieser dieses aufruft und anspricht. Die anderen Module kennen sich nicht. Durch diese Vorgehensweise minimiert man die Abhängigkeiten der Programmmodule.
Idealerweise definierst du Schnittstellen die dem Controller bekannt gemacht werden. Dieses Schnittstellen (interfaces, abstrakte Klassen oder sonst was) werden von den Modulen implementiert. Der Controller der Anwendung kennt dabei die Implementierung der Module nicht, braucht er ja auch nicht. Er muss ja nur wissen, wie sie funktionieren. Das legt ja die Schnittstlle fest. Dadurch sind die Module austauschbar. Es kann zum Beispiel ein anderes Modul eingesetzt werden, dass die Schnittstelle anders implementiert.
Wenn der Controller eines der Module nicht findet, wird die Funktionalität des fehlenden Moduls halt nicht angezeigt. Entsprechende Menüpunkte werden ausgeblendet.
Du kannst dir aber auch so eine Art Addin-Manager bauen.
-
Hallo,
danke für eure Antworten,das ist schlecht, da dann alle Module von einander abhängig sind.
völlig klar, das hab ich mir irgendwie nicht recht überlegt. Es müsste also so sein, das die Hauptanwendung erkennt, welche Module verfügbar sind, und dann vollkommen dynamisch entsprechende Menüs / Buttons anlegt.
Und die Kommunikation / Verwaltung macht ebenfalls dieser Kern. So sollte es schon eine ziemlich elegante Lösung sein.
Na da werd ich mal eine (längere) Design Phase einlegen.Thx
MfG Torsten
-
Vielleicht kannst du dir ja noch etwas bei COM abschauen. (IUnknown)
Also dass jedes Modul einige grundlegende Schnittstellen haben muss, die das Modul beschreiben können. So können sie sich dann bei dem "Kernel" registrieren.
-