En algunos proyectos de empresa-como (.NET, WCF) vi que todos los contratos de servicios aceptan un solo parámetro Request
y siempre vuelven Response
:Solicitud patrón/respuesta en la implementación de SOA
[DataContract]
public class CustomerRequest : RequestBase {
[DataMember]
public long Id { get; set; }
}
[DataContract]
public class CustomerResponse : ResponseBase {
[DataMember]
public CustomerInfo Customer { get; set; }
}
donde RequestBase/ResponseBase
contienen material común como ErrorCode, Context, etc. Los cuerpos de ambos métodos de servicio y proxies están envueltos en try/catch, por lo que la única manera de verificar si hay errores es mirando ResponseBase.ErrorCode
(que es una enumeración).
Quiero saber cómo se llama esta técnica y por qué es mejor en comparación con pasar lo que se necesita como parámetros de método y usando mecanismos estándar de paso/fallas de contexto WCF?
Solo para agregar a los beneficios y este es mi favorito. * Los DataContracts son resistentes a los cambios (más fáciles de versionar) que OperationContracts. Si agrega un parámetro, cambiará OperationContract, que es un cambio radical para los consumidores antiguos. Si agrega una propiedad a su DataContract, las versiones antiguas aún podrían funcionar (si están codificadas correctamente). –
Con respecto a su segundo punto, ¿cómo marcaría una propiedad en un contrato de datos según sea necesario, opcional, etc.? – elucid8
elucid8, en el DataMember puede agregar IsRequired = verdadero/falso para hacer la propiedad requerida/opcional. – CkH