179 messaggi dal 12 luglio 2007
ciao,
lavorando con wpf che consumano wcf mi veniva un domandone:
sul db ho la TabellaDati
per esporre i dati su wcf creo una classe molto semplice, un dto, il TabellaDatiDTO, ma lo faccio in un progetto Models. in questo modo condividendo il progetto tra i due progetti wpf e wcf ottengo che il client wpf riceva direttamente l'oggetto senza difficolta'.
ma all'interno del client wpf ho necessita' di una classe intelligente che gestisca diverse logiche come INotifyPropertyChange.
devo quindi tutte le volte duplicare l'oggetto dto e travasare i dati da e verso o esiste una soluzione piu' semplice, efficace e adatta?
Grazie.
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
ci sono diverse cose che puoi fare, non so quale sia più adatta al tuo caso:
  • Travasare. Come hai detto anche tu, puoi copiarti i valori di tutte le proprietà dal DTO all'instanza della tua nuova classe. Puoi usare Automapper per semplificarti la procedura ma, a questo punto, perché condividere il model tra il progetto WPF e il servizio WCF? Tanto vale che Visual Studio ti generi le classi proxy quando aggiungi il riferimento al servizio.
  • Fare a meno dei DTO. Nel model condiviso tra WPF e WCF, crei direttamente le classi che userai nel client, implementando INotifyPropertyChanged e altra logica di business che vorrai inserire al loro interno.
  • Creare dei proxy dinamicamente. In pratica riusi i DTO, o meglio, delle classi derivate dai DTO che li estendono aggiungendo qualcosa, come l'implementazione di INotifyPropertyChanged. Questa è una soluzione intermedia che ti eviterebbe la noia di dover implementare INotifyPropertyChanged su tutte le classi, ma che risulterebbe un poì più "strana" nel momento in cui volessi aggiungere dell'altra logica di business. Ecco un articolo di Gian Maria Ricci sull'argomento.
    http://www.codewrecks.com/blog/index.php/2008/08/04/implement-inotifypropertychanged-with-castledynamicproxy/ Sfrutta Castle Windsor per generare i proxy.


ciao,
Moreno

Enjoy learning and just keep making
179 messaggi dal 12 luglio 2007
grazie molto per la tua risposta.
pensandoci su, ho optato per disegnare sia la classe DTO che il Model, la tua opzione 1. sono semplicemente giunto alla conclusione che potrebbe essere un errore pensare al client ed al service come unica soluzione, anche se fisicamente li sto sviluppando così. il service deve/dovrebbe poter essere utilizzato (in futuro) anche da client non .net in questo caso non ha senso condividere il model, una struttura tanto elaborata che verrebbe utilizzata appieno solo su un client WPF. il dto è molto più leggero, contiene solo i dati, ed è comodo su tutti i client .net perchè mi permette di avere i dati pronti all'uso senza giocare col proxy. alla fine il fastidio sarebbe solo una doppia funzione per il travaso da e verso.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.