Domanda

Scenario: un'entità dal modello dati viene passata a un servizio Web WCF con varie informazioni, salvata in un database e quindi restituita con l'oggetto completamente popolato con informazioni aggiuntive.

   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 questo esempio, RequestID e CreatedDate vengono popolati solo quando il record viene inserito nel database e pertanto non dovrebbero essere visibili durante la richiesta iniziale.Tuttavia, dovrebbero essere visibili quando l'oggetto viene restituito.

L'attuale approccio che stiamo adottando consiste nel creare due classi (RequestInput, RequestOutput) nel nostro progetto di implementazione del servizio web che ereditano dall'entità. Aggiungeremo quindi gli attributi [DataMember] su varie proprietà che sono richieste e [IgnoreDataMember] su quelle che dovrebbero essere ignorate.

È questo l'approccio corretto?

È stato utile?

Soluzione

Non direi che è un modo corretto o errato.Ma è più usuale usare nomi simili a

[DataContract]
Request{...}

e

[DataContract]
Response{...}

la richiesta e la risposta dovrebbero idealmente essere disaccoppiate dalla rappresentazione del modello che stai utilizzando nel client e nel server, ovvero hai una facciata o un adattatore che le mappa al tuo modello dal codice del servizio.

questo è sulla falsariga di come lo farei - ma dipende molto dalla dimensione delle entità, ecc. - potresti voler coinvolgere un mappatore automatico in qualche modo.

// 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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top