Ich möchte eine Client-Anwendung implementieren und Komponententest (nicht unbedingt TDD), die mit einem TCP-Server unter Verwendung eines bestimmten Anwendungsprotokolls kommuniziert.Client/Server - Wie trennt man das Protokoll von der Netzwerklogik?
Ich habe in Orten wie here (1) und here (2) gesehen, dass Protokoll-Code vorzugsweise vom Netzwerk-Code entkoppelt sein sollte, so dass jeder einzeln getestet werden kann.
Ich verstehe jedoch nicht, wie ich diese Teile entwerfen und implementieren soll. Der erste Link spricht über eine MyProtocolHandler
Klasse mit den Methoden HelloMessage()
und HowdyMessage()
Bedeutet das, dass ein Protokoll-Handler zwei Methoden zum Generieren einer Nachricht und zum Verarbeiten der Antwort erwartet? Wie werde ich sie benutzen? Noch eine Sache, es sollte verschiedene ProtocolHandler
Klassen für jedes Nachrichten/Antwort-Paar oder nur eins für alle von ihnen geben?
Der zweite Link spricht über eine Reader
und eine Writer
. Auch hier kann ich nicht verstehen, wie ich sie verwenden soll.
Diese beiden sind nur Beispiele. Die Hauptfrage ist, wie kann ich die Logik vom Netzwerk entkoppeln und sie testen? Ich muss sagen, ich habe noch nichts versucht; Ich bin es gewohnt, nur gekoppelten Code zu schreiben und weiß nicht, wo ich anfangen soll.
Das ist genau, wie ich es implementiere, mit einer einzigen Klasse.Mein Verständnis der verknüpften Texte in der Frage ist jedoch, dass es möglich ist, den Code, der den Socket (den Netzwerkcode) verwendet, von dem Code zu trennen, der die API (den Protokollcode) implementiert, so dass ich letzteres testen kann, ohne dies tun zu müssen tatsächlich Networking durchführen. Wie das geht, kann ich nicht verstehen. – Piovezan
@Piovezan, habe ich weitere Informationen hinzugefügt, aber Sie müssen daran arbeiten und mit einem Design kommen. Beginnen Sie mit etwas Einfachem und dann werden Sie anfangen, bessere Wege zu finden, dies zu tun. – rodolk
Ich werde Option 1 ausprobieren. In Option 2 nach Nachrichtenwarteschlange meinen Sie ein vollwertiges wie RabbitMQ oder eine normale Java-Warteschlange? – Piovezan