Modul Entwicklung - Konzept
-
Hallo Gemeinde,
Ich habe meinem Programm ein Netzwerk-Modul verpasst, was an sich ganz gut funktioniert. Nun möchte ich das von Grund auf neu Entwickeln in Form einer Library, die ich dann auch für andere Programm verwenden kann. Bei der Vorgehensweise, habe ich mich für das Bridge pattern entschieden.
Der Grund für eine neu Konzipierung ist, das dass Modul im Quellcode so stark verankert ist, das Änderungen ziemlich kompliziert sind.
Das Netzwerk-Modul unterstützt derzeit nur 2 Protokolle: HTTP und TCP das ganze auf HTTPS und UDP auszuweiten möchte ich mir bei dem jetzigen Stand nicht antun.
Vorüberlegung
Das Netzwerk-Modul soll daten senden und empfangen können, das sind die rudimentären Grundfunktionen.Abstraction
class NetworkAbstract { public: virtual ~NetworkAbstract(); virtual bool connectToHost() = 0; virtual bool disconnectFromHost() = 0; virtual void setProtocol(protocol protocol) = 0; };Das wäre die Absoluten Grundfunktionen, die ich von dem Modul abstrahiert habe.
Als nächstes steht die Implementation an.Implementor
class NetworkImplementor { public: virtual void setProtocol(Protocol *protocol) = 0; virtual bool connectToHost(string host, string port) = 0; virtual bool disconnectFromHost() = 0; virtual void sendData(string data) = 0; virtual string getData() = 0; virtual ~NetworkImplementor(); };Das wäre mein erster Anlauf für das Grundgerüst der Library.
Nun eine Redefinition für Http.
Redefinition - HTTP
class HttpProtocol : public NetworkAbstract { public: HttpProtocol(NetworkImplementor *networkImplementor); bool connectToHost(string hostname, string port); bool disconnectFromHost(); void sendData(string data); string getData(); };Angemerkt sollte sein, das ich kein Protokoll neu erfinde... Ich habe schon eine Http Tcp lib, die das bereit stellt das ist mehr oder weniger dann ein Wrapper(?).
So, Gemeinde, das wäre im groben und ganze mein erster Entwurf. Kann da jemand irgendwelche Tipps für mich wie ich was besser machen sollte, oder was ich noch berücksichtigen sollte vor allem bei der Abstrahierung der Funktionalität. Das ist Abstrahieren ist nicht so einfach, wie ich dachte... deshalb weiß ich auch nicht so recht, ob ich das richtig gemacht habe, oder total versaut habe.
Danke für Eure Hilfe
so long
jd
-
Schreibe einfach eine DLL mit WinApi.
-
Nun möchte ich das von Grund auf neu Entwickeln in Form einer Library, die ich dann auch für andere Programm verwenden kann.definier "andere Programm" genauer!
- ist/muss/soll das andere Programm auch in c++ geschrieben
- ist/muss/soll der gleiche Compiler verwendet werden
- soll die Lib und das programm irgendwann mal getrennt verwaltet werdendanach wuerd ich entscheiden, ob ich ne lib oder ne dll verwende, und ob die dll ne c oder c++ schnittstelle bekommen wuerd ....
class HttpProtocol : public NetworkAbstract { public: HttpProtocol(NetworkImplementor *networkImplementor); bool connectToHost(string hostname, string port); bool disconnectFromHost(); void sendData(string data); string getData(); };Aehm, warum soll der Anwender (der der HTTP benutzt) was mit dem NetworkImplementor zu tun haben ? sollt das nicht impliziet (verdeckt) gehen ?
Da die connection daten bei jedem protokoll anders sind, wuerd ich die abstrahieren ....
also entweder auf nen generischen typ mappen mit ner eigenen protokoll spezifikation, also text im format "host:port" , also sowas wie ne url ....
oder nen abstraktes Connection data object bauen was je nach protokoll andere members hat, und erwarten dass deine Impl ne geeignete instanz bekommt.noch was :
HttpProtocol
- erbt bool connectToHost(); (von NetworkAbstract)
- und ueberdeckt das mit connectToHost(string hostname, string port);
das wird dir nen effekt bringenm, den sicher so ned haben willst ^^Ciao ...