Ich bin unsicher, wo ich meine Geschäftslogik platzieren soll. Ich habe einen WCF-Service, der seine Methoden meinem Kunden zur Verfügung stellt.
Sollte meine Geschäftslogik in die Service-Methode
gehen? %Vor%oder in einer separaten Klasse, in der jede WCF-Dienstmethode wiederum die Business-Schicht-Methoden aufruft.
%Vor%Meine persönliche Präferenz besteht darin, WCF als sehr dünne Schicht auf einer separaten Business-Schicht zu haben. Die WCF-Schicht führt lediglich Aufrufe an die Business-Schicht aus, ähnlich wie in Option 2. Dies gibt Ihnen eine gewisse Flexibilität, wenn Ihre Business-Schicht von anderen als WCF-Clients genutzt werden soll (z. B. , eine WPF-Anwendung, die Ihre Business-Schicht direkt und nicht über WCF aufruft.
WCF-Dienste sind standardmäßig bereits für die Wiederverwendung vorgesehen. Ich sehe keinen Grund, in Ihren Diensten keine Logik zu haben, denken Sie jedoch an Dinge wie das Prinzip der einfachen Verantwortlichkeit, damit Sie nicht mit einem Dienst enden, der ein Dutzend Dinge erledigt.
Selbst wenn Sie Ihre Funktionalität in kleinere Klassen aufteilen, ist es gar keine schlechte Idee, diese Klassen als WCF-Dienste zu hosten. Sie können sie dann in-proc (über Pipes) bei Bedarf oder über Maschinengrenzen hinweg (tcp) oder sogar als Webdienste verwenden. Erstellen Sie nach Bedarf Fassaden, um Zugriff auf die Funktionalität Ihrer anderen, kleineren Services zu erhalten.
Es ist nicht unbedingt notwendig, Logik in WCF-Serviceklassen zu vermeiden.
Ich denke, dass die Entscheidung von Ihren geschäftlichen Anforderungen abhängt. WCF ist ein Mechanismus zum Transport von Daten (Objekten) zwischen Server und Client. Wenn Sie möchten, dass Ihre Business-Logik auf dem Server ausgeführt wird, sollten Sie WCF das Objekt nach dem Ausführen Ihrer Geschäftslogik verfügbar machen lassen.
Es sollte in einer separaten Gruppe von Klassen gehen. Ihre WCF-Schicht sollte nur Logik enthalten, die sich direkt auf die Bereitstellung des Produkts des Dienstes bezieht.
In Ihrem Fall sehe ich, dass Sie eine WCF-Methode haben, die einen Benutzer zurückgibt (ich nehme an, dies ist eine benutzerdefinierte Klasse). Warum haben Sie eine separate Methode, um die UserID zurückzugeben, anstatt diese Eigenschaft als Teil der Rückgabe des User-Objekts zu füllen?
Tags und Links wcf business-logic business-logic-layer