Ho visto un sacco di domande relative alla mappatura di DTO per Domain Objects, ma non ho sentito che hanno risposto alla mia domanda. Ho usato molti metodi prima e ho le mie opinioni, ma sto cercando qualcosa di un po 'più concreto.Best practice per il mapping di DTO all'oggetto dominio?
la situazione:
Abbiamo molti oggetti di dominio. Stiamo utilizzando un modello CSLA in modo che i nostri oggetti di dominio possano essere piuttosto complessi e che contengano il proprio accesso ai dati. Non vuoi passare questi in giro sul filo. Scriveremo alcuni nuovi servizi che restituiranno i dati in numerosi formati (.Net, JSON, ecc.). Per questo (e altri motivi) stiamo anche creando un oggetto di trasferimento dati snello da passare sul filo.
La mia domanda è come deve essere collegato l'oggetto DTO e Dominio?
La mia prima reazione è usare un Fowler, DTO pattern-type solution. Ho visto questo fatto molte volte e mi sembra giusto. L'oggetto dominio non contiene riferimenti al DTO. Un'entità esterna (un "mapper" o un "assemblatore") viene chiamata per creare un DTO da un Oggetto Dominio. Normalmente c'è un ORM sul lato dell'oggetto dominio. Lo svantaggio di questo è che il "mapper" tende a diventare estremamente complesso per qualsiasi situazione reale e può essere molto fragile.
Un'altra idea è che l'oggetto dominio "contenga" il DTO, poiché è solo un oggetto dati snello. Le proprietà dell'oggetto dominio farebbero riferimento internamente alle proprietà DTO e potrebbero semplicemente restituire il DTO, se richiesto. Non vedo problemi con questo, ma mi sembra sbagliato. Ho visto alcuni articoli in cui le persone che utilizzano NHibernate sembravano utilizzare questo metodo.
Ci sono altri modi? Vale la pena usare uno dei modi sopra indicati? Se sì o no, perché?
Grazie per eventuali approfondimenti in anticipo.
L'automapper sembra interessante. Ho visto un sacco di codice prima che sarebbe stato sostituito. Il mio problema principale è che se dovessi rimanere bloccato con una tonnellata di codice di mappatura per qualsiasi motivo, preferirei avere il controllo su di esso da solo. –
Quando passiamo da DTO _ a_ Oggetti dominio, quella mappatura è manuale al 100%. È un problema molto più difficile da risolvere, poiché cerchiamo di mantenere operativi i nostri oggetti di dominio, anziché solo i contenitori di dati. Passare a un DTO è un problema facile da risolvere. –
Concordo sul fatto che sia sbagliato che l'oggetto dominio non abbia alcuna conoscenza dell'oggetto dto. Anche se possono essere correlati in questo caso, il loro scopo è completamente separato (i dtos sono generalmente creati per lo scopo) e si creerebbe una dipendenza non necessaria. – Sinaesthetic