Ich habe einen WCF-Dienst, der mehrere verschiedene Sammlungen zurückgeben kann.
Objekte in jeder Sammlung können Verweise auf Objekte in anderen Sammlungen haben. Beispiel: Ich habe eine Sammlung von Aufträgen und eine Sammlung von Kunden. Die Kundenobjekte enthalten eine Sammlung von Auftragsreferenzen, und jede Bestellung enthält eine Kundenreferenz.
Ich habe mich gefragt, wie man so etwas im Allgemeinen auf der Client-Seite handhabt. Soweit ich sehen kann, sind meine Möglichkeiten:
1) Lassen Sie WCF einfach alle Mitgliedsobjekte vollständig serialisieren und machen Sie sich keine Gedanken über die Duplizierung. Ich weiß, dass ich [PreserveReferences] verwenden kann, um dies bis zu einem gewissen Grad abzumildern, aber es gibt immer noch eine Menge Duplizierung und unnötige Serialisierung im Gange. Wenn ich z. B. ein Kundenobjekt vom Dienst anfordere, werden alle Mitglieder jeder Bestellung, die der Kunde hat, serialisiert, auch wenn ich diese Objekte bereits auf der Client-Seite in meiner Auftragssammlung habe. Das bedeutet auch, dass ich darauf achten muss, die Dinge immer nach Id abzugleichen, anstatt nur Instanzen zu vergleichen.
2) Serialisieren Sie Id's anstelle von Instanzen. Dies scheint der vernünftigste Ansatz zu sein, bedeutet aber, dass ich einen Punkt haben muss, an dem ich diese Ids wieder in Instanzen auf der Client-Seite verwandle. Dies bringt ein ganzes Durcheinander, wo dies zu tun, und wie die erforderlichen Repositories zu injizieren, um die Verdrahtung zu tun.
3) Verwenden Sie einfach Id's überall im Client, anstatt Instanzen zu verdrahten. Das fühlt sich für mich einfach falsch an und entfernt sich von dem ganzen Sinn von OOP. Anstatt auf eine Sammlung auf dem Objekt zuzugreifen, muss ich eine Sammlung von Id's zugreifen und dann schauen sie über einige globale Repository.
Im Moment tendiere ich zu 2, aber ich mag das Durcheinander in der Serie nicht, das daraus entstehen wird.
Ich sollte anmerken, dass der Client wahrscheinlich viel zustandsbehafteter ist als die meisten WCF-Clients und dass er eine offene Verbindung zum Dienst mit Callbacks usw. aufrechterhält, um seine Sammlungen zu pflegen, da er Echtzeitdaten anzeigt.
Prost