Richiesta di feedback/opzioni/commenti relativi a un modello "migliore" da utilizzare per i dati di riferimento nei miei servizi.Dati del contratto WCF e dati delle entità di riferimento?
Cosa intendo per dati di riferimento?
Utilizziamo Northwind come esempio. Un ordine è correlato a un cliente nel database. Quando implemento il mio servizio ordini, in alcuni casi desidero che il riferimento sia un cliente "completo" da un ordine e altri casi quando desidero solo un riferimento al cliente (ad esempio una coppia chiave/valore).
Ad esempio, se facessi un GetAllOrders(), non vorrei restituire un ordine completamente compilato, vorrei restituire una versione leggera di un ordine con solo i dati di riferimento per il cliente di ciascun ordine. Se ho fatto un metodo GetOrder(), però, probabilmente vorrei inserire i dettagli del cliente perché è probabile che un consumatore di questo metodo possa averne bisogno. Potrebbero esserci altre situazioni in cui potrei voler chiedere che i dettagli del cliente vengano compilati durante determinate chiamate di metodo, ma lasciati fuori per gli altri.
Ecco quello che è venuta in mente:
[DataContract]
public OrderDTO
{
[DataMember(Required)]
public CustomerDTO;
//etc..
}
[DataContract]
public CustomerDTO
{
[DataMember(Required)]
public ReferenceInfo ReferenceInfo;
[DataMember(Optional)]
public CustomerInfo CustomerInfo;
}
[DataContract]
public ReferenceInfo
{
[DataMember(Required)]
public string Key;
[DataMember(Required)]
public string Value;
}
[DataContract]
public CustomerInfo
{
[DataMember(Required)]
public string CustomerID;
[DataMember(Required)]
public string Name;
//etc....
}
Il pensiero qui è che, poiché ReferenceInfo (che è una coppia chiave/valore generico) è sempre necessario in CustomerDTO, avrò sempre ReferenceInfo . Mi fornisce informazioni sufficienti per ottenere i dettagli del cliente in un secondo momento, se necessario. Lo svantaggio di avere CustomerDTO richiede ReferenceInfo è che potrebbe essere eccessivo quando sto ricevendo l'intero CustomerDTO (cioè con CustomerInfo compilato), ma almeno mi sono garantite le informazioni di riferimento.
C'è qualche altro modello o quadro che posso usare per rendere questo scenario/implementazione "più pulito"?
La ragione per cui chiedo è che, sebbene potremmo semplicemente dire in Northwind di restituire SEMPRE un CustomerDTO completo, che potrebbe funzionare correttamente nella semplicistica situazione di Northwind. Nel mio caso, ho un oggetto che ha 25-50 campi che sono dati di riferimento/tipo di ricerca. Alcuni sono più importanti da caricare rispetto ad altri in situazioni diverse, ma mi piacerebbe avere il minor numero possibile di definizioni di questi tipi di riferimento (in modo da non entrare nel "Danno della manutenzione DTO").
Opinioni? Risposta? Commenti?
Grazie!
FWIW ... Non penso Linq a SQL, Entity Framework o ADO.NET Data Services mi aiuterà qui, poiché ho 3 sistemi diversi, tutti che rappresentano, in sostanza, lo stesso set di dati. Questo è il primo passo verso il consolidamento di questi sistemi, o almeno per i sistemi esterni, per poter utilizzare i dati di questi tre sistemi in modo più generico e coerente. – Brian
Potresti rispondere http://stackoverflow.com/questions/9483286/understanding-data-outside-of-service-soa? – Lijo