WCF - Contratti di servizio multipli utilizzando gli stessi contratti di dati
Domanda
Ho una nuova domanda per i guru WCF.
Quindi, ho una lezione User
che è vicino alla rappresentazione "utente" dal DB che utilizzo per le operazioni di database. Ora, vorrei avere 2 diversi contratti di servizio che utilizzano questa classe come contratto di dati, ma ognuno a modo suo ... intendo,
public class DBLayer
{
void InsertUsers(List<User> userList)
{
// both 'PropertyVisibleForService1' and 'PropertyVisibleForService2'
// are used HERE to be inserted into their columns
}
}
[DataContract]
public class User
{
[DataMember] public string PropertyVisibleOnlyForService1{...}
[DataMember] public string PropertyVisibleOnlyForService2{...}
}
[ServiceContract]
public interface IService1
{
List<User> GetUsers(); // user with 'PropertyVisibleOnlyForService1' inside
}
[ServiceContract]
public interface IService2
{
List<User> GetUsers(); // user with 'PropertyVisibleOnlyForService2' inside
}
Quindi, l'idea è che ogni servizio riceverà un diverso tipo di utente, sottoinsieme di 'User'
. Tenendo presente che voglio usare il 'User'
Come per le operazioni DB, quali sarebbero le mie opzioni per raggiungere questo obiettivo? Ho davvero bisogno di creare contratti di dati diversi o c'è un altro modo più intelligente?
Meglio non solo darmi la soluzione, ma anche per spiegarmi alcune migliori pratiche e alternative.
Grazie in anticipo.
EDIT1: ho aggiunto una lezione Dummy Dblayer qui per una panoramica migliore e perché penso che l'eredità potrebbe non essere buona in questo caso.
Una soluzione sarebbe di averne un'altra 'UserForService1
' e 'UserForService2
"come contratti di dati che mapperebbero alla fine da/in un"User
'Ma volevo altri punti di vista.
EDIT2: un ottimo articolo che mi ha aiutato in questo caso: http://bloggingabout.net/blogs/vagif/archive/2009/03/29/iextensilebletaobject-is-not-only-for-backward-compatibility.aspx
Nessuna soluzione corretta