Pregunta

Escenario: una entidad del modelo de datos se pasa a un servicio web WCF con información diversa, se guarda en una base de datos y luego se devuelve con el objeto completamente poblado con información adicional.

   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);

En este ejemplo, RequestID y CreatedDate se completan solo cuando el registro se inserta en la base de datos y, por lo tanto, no deberían estar visibles durante la solicitud inicial.Sin embargo, deberían estar visibles cuando se devuelva el objeto.

El enfoque actual con el que vamos es crear dos clases (RequestInput, RequestOutput) en nuestro proyecto de implementación de servicios web que heredan de la entidad. Luego agregaremos atributos [DataMember] en varias propiedades que son requeridas e [IgnoreDataMember] en aquellas que deben ignorarse.

¿Es este el enfoque correcto?

¿Fue útil?

Solución

No diría que es una forma correcta o incorrecta.Pero es más habitual utilizar nombres en la línea de

[DataContract]
Request{...}

y

[DataContract]
Response{...}

Idealmente, la solicitud y la respuesta deberían estar desacopladas de la representación del modelo que está utilizando en el cliente y el servidor, es decir, tiene una fachada o adaptador que los asigna a su modelo desde su código de servicio.

Esto está en la línea de cómo lo haría yo, pero esto es muy subjetivo dependiendo del tamaño de las entidades, etc., es posible que desee involucrar un mapeador automático de alguna manera.

// 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;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top