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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top