Entwerfen von WCF-Datenverträgen und -operationen

Ich fange an, einen WcF-Servicebus zu entwerfen, der jetzt klein ist, aber mit dem Wachstum unseres Geschäfts mitwächst. Ich mache mir also Sorgen über einige Probleme und versuche auch, YAGNI nicht zu sehr zu schaden. Es ist eine E-Commerce-Plattform. Das Problem ist, dass ich zu viele Überlegungen anstellen muss. Ich werde ein Szenario geben, um alle meine Fragen zu demonstrieren.

Wir haben eine E-Commerce-Website, die Produkte verkauft und letztendlich liefert. Hierfür haben wir einen PlaceOrder-Dienst, der unter anderem ein Adressobjekt erwartet, das in diesem Zusammenhang (unsere Website, die eine Bestellung aufgibt) aus Ort, Straße und Postleitzahl besteht.

Wir arbeiten auch mit Partnern zusammen, die unsere Plattform nur zum Verkauf von Produkten nutzen. Sie kümmern sich um die Lieferung. Für dieses Szenario haben wir einen PlaceOrderForPartner-Dienst, der unter anderem ein Address-Objekt erwartet. In diesem Kontext (Partner, der eine Bestellung aufgibt) besteht das Adressobjekt jedoch aus verschiedenen Informationen, die nur für eine Bestellung des Partners relevant sind.

In diesem Szenario habe ich mehrere Fragen:

1) Wie organisiere ich diese DataContracts-Objekte in Namespaces und Ordnern in meiner Lösung? Ich dachte darüber nach, einen kontextbezogenen Ordner (Partner, Kunde usw.) zu haben, in dem die Dienste und die Datenverträge gespeichert werden.

Also hätte ich

- MySolution.sln
-    Partner (folder)
-        PartnetService.svc
-    DataContracts (folder)
-        Address
-    Customer (folder)
-        Customer.svc
-    DataContracts (folder)
-        Address

Auf diese Weise würde ich einen Namespace haben, um alle meine kontextspezifischen Datenkontrakte zu platzieren.

2) Was ist mit Service Design? Soll ich einen Service für jeden erstellen, der eine PlaceOrder-Methode darin platzieren und bestellen kann:

Partner.svc / PlaceOrder
Customer.svc / PlaceOrder

oder erstellen Sie einen Bestellservice mit PlaceOrderForPartner und PlaceInternalOrder wie folgt:

Order.svc / PlaceOrderForPartner
Order.svc / PlaceOrderForCustomer

3) Angenommen, ich wähle die erste Option in der letzten Frage aus. Was soll ich mit den Vorgängen tun, die in der Bestellung ausgeführt werden und die Partner und Kunden gemeinsam haben?

4) Soll ich DataContracts und Service Definition in dieselbe Assembly einfügen? Einer für jeden? Alles mit der Service-Implementierung?

5) Wie benenne ich Eingangs- und Ausgangsnachrichten für Operationen? Soll ich die Entitäten selbst verwenden oder die Vorlage OperationNameRequest und OperationNameResponse verwenden?

Meine große Frage lautet unter dem Strich: Wie "organisieren" Sie die Datenverträge und Services, die an einer Serviceerstellung beteiligt sind?

Vielen Dank im Voraus für alle Gedanken dazu!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage