Frage

Szenario: Eine Entität aus dem Datenmodell wird mit verschiedenen Informationen an einen WCF-Webdienst übergeben, in einer Datenbank gespeichert und dann mit dem Objekt zurückgegeben, das vollständig mit zusätzlichen Informationen gefüllt ist.

   public class Request
   {
    public virtual Guid RequestID { get; set; }
    public virtual string RequestType { get; set; }
    public virtual System.DateTime CreatedDate { get; set; }
    //More properties here populated from DB
   }

   [OperationContract]
   Request CreateRequest(Request input);

In diesem Beispiel werden RequestID und CreatedDate nur ausgefüllt, wenn der Datensatz in die Datenbank eingefügt wird, und sollten daher während der ersten Anforderung nicht sichtbar sein.Sie sollten jedoch sichtbar sein, wenn das Objekt zurückgegeben wird.

Der derzeitige Ansatz besteht darin, in unserem Webdienst-Implementierungsprojekt zwei Klassen (RequestInput, RequestOutput) zu erstellen, die von der Entität erben. Anschließend fügen wir [DataMember] -Attribute für verschiedene erforderliche Eigenschaften und [IgnoreDataMember] für diejenigen Eigenschaften hinzu, die ignoriert werden sollen.

Ist das der richtige Ansatz?

War es hilfreich?

Lösung

Ich würde nicht sagen, dass es richtig oder falsch ist.Es ist jedoch üblicher, Namen in Anlehnung an zu verwenden

[DataContract]
Request{...}

und

[DataContract]
Response{...}

Die Anforderung und Antwort sollte idealerweise von der Modelldarstellung entkoppelt sein, die Sie im Client und auf dem Server verwenden - dh Sie haben eine Fassade oder einen Adapter, der sie Ihrem Modell aus Ihrem Servicecode zuordnet.

Dies entspricht in etwa meiner Vorgehensweise - dies ist jedoch sehr subjektiv, abhängig von der Größe der Entitäten usw. -. Möglicherweise möchten Sie einen Auto-Mapper verwenden.

// higher level code
var entity = new Entity { properties we know before call };
// pass down to service layer 
var response = service.CreateRequest(new Request { Prop1 = entity.Prop1... } );
entity.RequestID = response.RequestId;
entity.CreatedDate = response.CreatedDate;

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top