2 Stimmen

Entwerfen der WCF-Dienstschnittstelle. Prozeduraler vs. objektorientierter Entwurf

Wir bauen ein Produkt, das von anderen Systemen genutzt werden kann. Da wir eine SOA haben, entwickeln wir nur einen Dienst (WCF). Wir hatten mehrere kontroverse Diskussionen darüber, wie die Schnittstelle dieses Dienstes gestaltet werden sollte. Wir haben die Wahl zwischen prozeduralem und OO-Design für den Dienst.

Da unser Dienst von .NET und Java verwendet wird, sagen einige, dass es schwierig ist, einen Dienst zu integrieren, wenn er ein OO-Design hat. Andere meinen, dass Dienste keinen OO-Ansatz verwenden sollten. Einige sagen, dass OO völlig in Ordnung ist. Das Ergebnis ist, dass es keine klare Meinung dazu gibt.

WCF bietet eine einfache Möglichkeit, beide Designs zu verwenden, aber welches ist das beste?

2voto

Andrew Shepherd Punkte 42283

Ich gehe davon aus, dass die Definition von "objektorientiert", die Sie verwenden, das Konzept des Programms ist, das "Objekte" verwaltet, und diese einzelnen Objekte verwalten ihren internen Zustand und stellen Funktionen zur Verfügung, die aufgerufen werden können.

Das nächstgelegene WCF-Paralell dazu sind sitzungsbasierte Dienste, bei denen die Lebensdauer jeder Dienstinstanz vom Client gesteuert wird.

Wenn Sie möchten, dass dieser Dienst von Java aus aufgerufen wird, müssen Sie basicHttpBinding verwenden, da dieses das klassische Webservice-Protokoll verwendet.

Diese Bindung bietet keine Unterstützung für sitzungsbasierte Dienste, so dass Sie sitzungsbasierte Dienste nicht verwenden können.

Daher können Sie das "objektorientierte" Paradigma nicht auf den Dienst selbst anwenden.

1voto

p.marino Punkte 6166

Sie präzisieren Ihre ursprüngliche Frage mit den Worten: "Meine Frage bezieht sich auf die Methoden des Dienstes, sollten sie komplexe Typen anstelle von skalaren Parametern erhalten?"

Sie sollten sich die folgenden Fragen stellen:

a) Besteht die Möglichkeit, dass der Dienst auch von Nicht-OO-Kunden genutzt werden kann? Keine Ahnung, ein COBOL-Batch? Selbst wenn Ihr Unternehmen auf OO-Technologie (Java/.NET) standardisiert hat, besteht die Möglichkeit, dass dieser spezifische Dienst in Zukunft von einer externen Einheit (Kunde, PHP-Website, was auch immer) genutzt wird?

b) Haben Sie bereits viele solcher Dienste in der Vergangenheit erstellt (so dass Sie absolut sicher sind, dass es keine Probleme mit dem Marshalling/Serialisieren/Deserialisieren komplexer Typen gibt, oder zumindest wissen, was Sie sicher verwenden können)?

Wenn Sie sich in beiden Punkten sicher sind, können Sie bei der Gestaltung der Ein- und Ausgänge Ihres Dienstes einen "OO"-Ansatz verwenden. Andernfalls wählen Sie den sichersten (wenn auch primitiveren) Ansatz und zerlegen die "Objekte" in Gruppen von Skalaren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X