Die Trennung von WCF-Diensten oder anderen Diensten ist ein Balanceakt.Das Prinzip besteht darin, dass Sie die Komplexität unter Druck halten und gleichzeitig die Leistung in Betracht ziehen wollen.
Je mehr Dienste Sie erstellen, desto mehr Konfiguration müssen Sie schreiben. Außerdem erhöhen Sie die Anzahl der Proxy-Klassen, die Sie auf der Clientseite erstellen und pflegen müssen.
Wenn Sie zu viele ServiceContracts auf einen Service setzen, erhöht sich die Zeit, die zum Generieren und Verwenden eines Proxys benötigt wird. Wenn Sie jedoch nur ein oder zwei Operationen für einen Vertrag abschließen, haben Sie dem System Komplexität hinzugefügt, die nur sehr wenig zu gewinnen ist. Dies ist kein wissenschaftliches Rezept, aber eine gute Faustregel könnte etwa 10-20 OperationContracts pro ServiceContract sagen.
Klassenkopplung ist natürlich eine Überlegung, aber beschäftigen Sie sich wirklich mit getrennten Angelegenheiten? Es hängt davon ab, was Ihr System tut, aber die meisten Systeme befassen sich nur mit ein paar Bereichen, die von Interesse sind, so dass die Aufteilung der Dinge die Klassenkopplung sowieso nicht so stark verringert.
Eine andere Sache zu erinnern, und das ist sehr wichtig ist, um Ihre Methoden so allgemein wie möglich zu machen. WCF behandelt DataContracts aus einem bestimmten Grund. DataContracts bedeutet, dass Sie jedes Objekt an den und vom Server senden können, solange die DataContracts bekannt sind.
So zum Beispiel könnten Sie 3 OperationContracts haben:
[OperationContract]
Person GetPerson(string id);
[OperationContract]
Dog GetDog(string id);
[OperationContract]
Cat GetCat(string id);
Aber, so lange diese alle bekannten Typen sind, können Sie diese in einem Betrieb wie verschmelzen könnte:
[OperationContract]
IDatabaseRecord GetDatabaseRecord(string recordTypeName, string id);
Letztlich ist dies bei der Gestaltung von Serviceverträgen das Wichtigste. Dies gilt für REST, wenn Sie eine DataContract-Serialisierungsmethode wie die Serialisierungsmethode verwenden.
Zuletzt, gehen Sie alle paar Monate über Ihre ServiceContracts zurück und löschen Sie Operationen, die nicht von den Clients verwendet werden. Dies ist ein weiterer großer!
Wenn Sie partielle Klassen-/Schnittstellendateien verwenden, um Konflikte zu vermeiden, was ist mit dem Argument "wird nicht gut skalieren"? Was heißt das technisch? – Askolein
@Askolein ... Es bedeutet, wenn Sie zu viel in einen einzigen Vertrag gestopft haben, kann es zu einem Leistungsengpass sowie zu einem Wartungs-/Erweiterungskopfschmerz werden. –
danke für deine Antwort, aber meine Frage war mehr "warum" könnte es ein Leistungsproblem sein, nicht "was" ist ein Leistungsproblem. Sie sagen "Flaschenhals": Ich habe verstanden, dass in ISS/WCF jede Web-Anfrage eine neue Service-Instanz ist. Mehrere Anfragen an einen einzigen großen Dienst wären immer noch mehrere Instanzen, nicht eine Instanz, die alle bedient. Also kein Skalierungsproblem. Ist diese Argumentation richtig? – Askolein