2010-02-03 3 views
8

È possibile utilizzare AutoMapper con tipi Immutable?Automapper e immutabilità

Ad esempio il mio tipo di dominio è immutabile e voglio mappare il mio tipo di vista a questo.

Credo che non lo sia ma voglio solo confermarlo.

Inoltre, come è consigliabile mantenere immutabili i tipi di dominio, qual è la procedura migliore quando si mappano i tipi di visualizzazione ai tipi di dominio?

+0

Dominio immutabile? Non credo che sarebbe una dichiarazione corretta – David

+2

@David Perché no? –

risposta

8

In genere eseguo manualmente la mappatura da tipi di visualizzazione a tipi di dominio, poiché in genere lavorerò attraverso un'interfaccia più complessa, utilizzando metodi e così via. Se si utilizza AutoMapper per passare dalla visualizzazione al dominio, si è ora bloccati su un modello di dominio anemico, indipendentemente dal fatto che lo si sia deciso o meno.

+0

Perché dovresti dire che il modello di dominio è anemico, se usi automapper per mappare dalla vista al dominio? Avrai bisogno del tuo modello di dominio popolato con i dati dalla vista in qualche modo. E 'perché tu proponi di creare/popolare il dominio attraverso i metodi/i cast? –

+1

Sì, esattamente. Guarda le mie serie sul potenziamento del tuo dominio: http://www.lostechies.com/blogs/jimmy_bogard/archive/2010/02/03/strengthening-your-domain-a-primer.aspx Se guardi gli altri I framework MVC, come Rails, il concetto di un modello è un modello persistente, quindi non è necessario AutoMapper. –

+0

Penso che i tuoi articoli mi abbiano influenzato, ho spesso usato automapper per mappare oggetti di dominio su dto/vm ma finisco sempre per dover cercare come far fare a un automapper qualcosa che semplicemente mappa le proprietà l'un l'altro. Farlo a mano non rende più facile la lettura e il debug. Come strutturate il codice - cioè dove mettete i metodi che mappano le proprietà degli oggetti? – sambomartin

2

AutoMapper si affida ai setter di proprietà per fare il suo lavoro, quindi se si dispone di proprietà di sola lettura, AutoMapper non sarà molto utile.

È possibile sovrascrivere il comportamento di mappatura e, ad esempio, configurarlo per richiamare un costruttore specifico, ma ciò sostanzialmente annulla lo scopo di AutoMapper perché quindi si esegue manualmente la mappatura e si è riusciti solo ad aggiungere un goffo passo aggiuntivo nel processo.

Non ha molto senso per me che il modello di dominio sia immutabile. Come lo aggiorni? L'intera applicazione è di sola lettura? E se sì, perché dovresti mai aver bisogno di mappare a il tuo modello di dominio invece di da? Un modello di dominio immutabile suona ... piuttosto inutile.

P.S. Suppongo che intenda lo this AutoMapper e non lo auto-mapping feature in Fluent NHibernate o anche qualche altra cosa totalmente diversa. Se questo è sbagliato, dovresti essere più specifico e aggiungere tag per la tua piattaforma/lingua.