2009-03-07 16 views
0

Ich beginne mit dem Entwurf einer neuen App, die hauptsächlich netzwerkorientiert ist, und ich suche nach Ratschlägen von Leuten, die ein gutes architektonisches Design oder ein OOP-Klassenmodell entwickelt haben.Wie haben Sie Ihre netzwerkorientierten Apps strukturiert?

Bitte beschreiben Sie die grundlegende Architektur und/oder Klassenstruktur. Haben Sie die Kommunikationsbits abstrahiert? Auf welche Klasseneinheiten bist du gekommen?

Die App wird sowohl Listener- als auch Client-Klassen enthalten. Es ähnelt einem Feed-Aggregator, verwendet jedoch persistente Verbindungen statt HTTP. Mit anderen Worten, ich verbinde mich mit einem Socket und habe eine persistente Verbindung, in der Daten in beide Richtungen fließen. Dann habe ich auch Clients, die sich dauerhaft mit mir verbinden, und ich sende ihnen einige (oder alle) Daten zu.

Auch kann ich nicht WCF oder irgendetwas verwenden, das in .NET 3.0 oder 3.5 ist (obwohl ich C# 3 verwenden kann, weil ich auf VS2008 entwickle). Ich muss mit Windows 2000 kompatibel sein.

Antwort

0

Ich bin am Ende einer Client-Server-App, die ich vor ein paar Wochen begann zu schreiben. Ich benutzte WCF für den .Net cient & Server.

Aber der Server musste auch eine Verbindung zu einem Gerät im Netzwerk herstellen, das nur ASCII über TCP/IP verstand.

Haben Sie die Kommunikationsbits abstrahiert?

Ja. Ich vermute. Ich meine, ich bin mir nicht sicher, ob ich deine Frage hundertprozentig verstanden habe. Für meine TCP-Verbindung zu dem Gerät der dritten Partei versteckte ich die Details der TCP-Verbindung und Kommunikation hinter einer Klasse, die ich schrieb. Das fragliche Gerät konvertiert ASCII-Befehle in IR-Signale, um Dinge wie Satellitenschüsseln und DVD-Player zu steuern. Ich abstrahiert die TCP-Kommunikation in eine Klasse, so dass alle meine Server zu tun hatte, ist es, einen Anruf zu tätigen, wie:

_irService.SendCommand(someAsciiCommand); 

Welche Klasse Einheiten haben Sie kommen mit?

Sie basierten auf meiner Domäne. Ihre sollten auf Ihrer Domain basieren. Ich bin mir nicht sicher, ob ich diese Frage darüber verstehe. Ihre Domain diktiert Ihre Objekte.

In meiner Domäne beschäftigte ich mich mit einer Server-Anwendung, die für die Planung und Wiedergabe von Multicast-Broadcasts über UDP mit VLC zuständig war. Diese Multicast-Broadcasts mussten in jeder Hinsicht konfigurierbar sein.

Als ich die Domäne analysierte, kam ich auf ein Modell, das aus Broadcasts, Channels, Devices und BroadcastProcesses bestand (eine Klasse, die dafür verantwortlich war, einen vlc.exe-Prozess zu starten und seinen Lebenszyklus zu erhalten).

Die Domäne hatte wenig Einfluss auf die Netzwerktechnologie. Ich endete mit ein paar Duplex- "Diensten" in WCF, die mir erlaubten, die Domäne zu manipulieren. Die Netzwerkauswahl wurde jedoch nicht von der Domäne diktiert. Ich wollte eine TCP-Verbindung mit binärer Serialisierung meiner Objekte, und ich wollte eine bidirektionale Kommunikation mit dem Server, damit meine Clients Echtzeit-Updates über Callbacks erhalten konnten. Diese Optionen standen mir zur Verfügung, unabhängig davon, wie meine Domain aussah.

0

"Netzwerkanwendung" ist eine unklare Kategorie, die ein recht breites Spektrum möglicher Anforderungen und Designs abdeckt. Per Definition müssen Sie mit Nebenläufigkeit und Latenzen umgehen. Robustheit ist immer eine Herausforderung: Es ist allzu einfach, ein System zu entwerfen, dessen Verfügbarkeit der kleinste gemeinsame Nenner aller seiner Hardware- und Softwarekomponenten ist.Sie müssen das Betriebssystem und die Komponenten Ihrer Anwendung aktualisieren: Können Sie davon leben, die gesamte Lösung zu entfernen, oder benötigen Sie einen Hot/Cold-Standby- oder sogar Failover-Modus? Netzwerke scheitern auf exotische Weise (zumindest für uns arme, reine Software-Leute): Sie sind abhängig von so vielen Dingen, die Sie nie in Erwägung ziehen (Router, Switches, DNS-Server, das Temperament des bärtigen Netzwerk-Ingenieurs den Flur hinunter!), Und sollten entwerfen die Interaktionen mit einer pessimistischen Geisteshaltung.

Eine Warnung: Seien Sie nicht zu objektorientiert beim Entwurf verteilter Anwendungen. Objekte haben ihren Platz in der Verwaltung der Softwarekomplexität, aber in dem Moment, in dem Sie anfangen, sie auf den Draht zu bringen, werfen eine große Anzahl von Problemen mit der Leistungs- und Versionsabhängigkeit ihre hässlichen Köpfe auf. Serviceorientierte Architektur ist ein Schlagwort, ist aber bis zu einem gewissen Punkt als Konstruktionsprinzip nützlich. Die Mainframe-Jungs wissen das seit Ewigkeiten ...

Zwei allgemeine Buchempfehlungen:

  • Designing Concurrent, Distributed, and Real-Time Applications with UML ist ein paar Jahre alt, aber bringt die Herausforderungen zu Hause auf Sie zu können (vor allem, wenn Sie wirklich schwer haben oder weiche Echtzeitabhängigkeiten irgendwo). Ein bisschen theoretisch, aber dient dazu, ein gewisses Maß an Respekt für die Komplexität zu vermitteln!
  • Enterprise Integration Patterns ist ein systematischer Überblick über die verschiedenen Designoptionen, die Sie zur Integration neuer und älterer Komponenten verwenden können.
Verwandte Themen