Utilizzo di Automapper per associare DTO agli oggetti del dominio

3

Vedi l'articolo qui: link

Lo scrittore sconsiglia l'uso di Automapper per mappare DTO agli oggetti del dominio in quanto può causare problemi con la convalida. Perchè è questo? I miei modelli di dominio hanno una funzione chiamata Validate (), che viene chiamata dal livello di servizio, ovvero deve essere chiamata esplicitamente dal livello di servizio (e dal livello di dominio per assicurarsi che il livello di servizio abbia fatto il suo lavoro. a come lo stesso autore raccomanda la convalida in questo articolo: link (vedi metodo IsValid ()) .

In che modo Automapper ignora la convalida se viene utilizzata per associare DTO agli oggetti del dominio?

    
posta w0051977 20.08.2017 - 17:11
fonte

1 risposta

3

Da quello che ho capito, il suo punto è che gli oggetti di dominio non mapperanno in genere 1 a 1 ai DTO, nel senso che non avranno tutte le stesse proprietà. In effetti, gli oggetti dominio possono avere pochissimi getter e setter; potrebbero persino non averne affatto. Questo è legato al principio "tell, do not ask": se le responsabilità sono distribuite correttamente attraverso le classi, gli oggetti del dominio avranno pochissima necessità di estrarre dati gli uni dagli altri per ottenere qualcosa. Invece, chiameranno per lo più metodi l'uno sull'altro. Ora, mentre puoi usare librerie di tipo Automapper per copiare dati da DTO agli oggetti del dominio in uno scenario del genere, il punto dell'autore è che ciò richiede una configurazione abbastanza complicata, che sconfigge lo scopo di avere un automapper.

They can perform the mapping of course, but that would require setting up quite sophisticated mapping rules which diminishes the value of having the automapper in the first place.

Se il design dei tuoi oggetti di dominio è influenzato dal desiderio di supportare la semplice automapping, allora interromperà l'incapsulamento introducendo getter e setter che non sono realmente necessari. Questo potrebbe introdurre problemi con la convalida. Ad esempio, senza considerazioni di automapping, gli oggetti di dominio possono essere progettati in modo tale che non sia possibile richiamare un metodo o una proprietà e far finire l'oggetto in uno stato non valido quando il controllo ritorna al chiamante. Se si introducono getter e setter e un metodo Validate (), diventa possibile che un oggetto si trovi in uno stato non valido tra una chiamata a un setter e una chiamata a Validate (). Questo può o non può essere OK - come tutto il resto, è un compromesso.

    
risposta data 21.08.2017 - 10:18
fonte

Leggi altre domande sui tag