Domanda

Sono curioso di sapere ciò che la comunità si sente su questo argomento. Ho recentemente venuto nella questione con uno scenario NHibernate / WCF (entità persistevano al livello di servizio) e realizzati I può essere andando nella direzione sbagliata qui.

La mia domanda è chiaramente, quando si utilizza un grafico oggetto persistente (NHibernate, LINQ to SQL, ecc) dietro ad un servizio web (WCF in questo scenario), si preferisce inviare quelle entità oltre il filo? Oppure volete creare una serie di accendino DTO (sans riferimenti ciclici) attraverso?

È stato utile?

Soluzione

DTOs. Utilizzare automapper per la mappatura oggetto a oggetto

Altri suggerimenti

Sono stato in questo scenario più volte prima e posso parlare per esperienza su entrambi i lati. Originariamente Stavo solo serializzazione miei entità e di inviarli come è. Questo ha funzionato bene dal punto di vista funzionale, ma più ho guardato dentro più mi rendevo conto che stavo inviando più dati di quanto avevo bisogno di e stavo perdendo la possibilità di variare l'implementazione su entrambi i lati. Nelle applicazioni di servizio successive ho preso a DTOS create il cui unico scopo è quello di ottenere i dati da e verso il servizio web.

Al di fuori di qualsiasi interoperabilità, dover pensare a tutti i campi che vengono inviati attraverso la rete è molto utile (per me) per assicurarsi che io non sono l'invio di dati che non è necessario o, peggio, non dovrebbe scendere al cliente.

Come altri hanno detto, automapper è un ottimo strumento per l'entità di mappatura DTO.

Ho quasi sempre creato DTOs per trasferire oltre il filo e utilizzare le entità richter sul mio server e client. Sul client faranno avere una certa logica di presentazione comune, mentre sul server avranno la logica di business. Mapping tra i DTOs e le entità può essere stupido, ma deve accadere. Strumenti come automapper aiutano.

Se stai chiedendo posso inviare entità serializzati da un servizio web per il mondo esterno? allora la risposta è decisamente no, si sta andando ad ottenere l'interoperabilità minima se si fa questo. DTOs aiutare a risolvere questo problema definendo una serie di 'oggetti' che possono essere istanziati in qualsiasi lingua se si sta utilizzando C #, Java, JavaScript o qualsiasi altra cosa.

Ho sempre avuto problemi di invio di oggetti NHibernate sopra il filo. In particolare se si sta utilizzando un modello di ActiveRecord. e / o se il vostro oggetto ha legami con la sessione (bleah). Un altro risultato brutto è che NHibernate può cercare di caricare l'oggetto all'entrata del metodo (prima di poter arrivare ad essa), che può eventualmente anche causare problemi.

Quindi ... ricevendo il messaggio qui? Problemi, problemi problemi ... di DTO tutta la strada

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