Mappatura dei modelli di dominio su ViewModel

5

Ho un'applicazione ASP.net MVC5 strutturata in questo modo:

Nucleo

  1. Progetto di dominio

Infrastrutture

  1. Progetto DAL
  2. Utilità

UI

  1. Progetto UI (contiene ViewModel al momento, probabilmente lo metterà in un progetto separato, poiché mi aspetto che l'applicazione cresca tempo)

Funziona attraverso l'Unità di lavoro e un repository generico, iniettato con Unity.

La mia domanda è:

Sto provando rigorosamente a utilizzare ViewModels per le mie visualizzazioni dell'interfaccia utente, dove dovrei inserire la logica per mappare il modello di dominio < = > ViewModel?

Devo farlo nel controller o inserire la logica di mappatura nel ViewModel stesso e creare i metodi ViewModel.FromDomainObject (DomainObject domainObject) o ViewModel.ToDomainObject (ViewModel viewModel) ecc.?

    
posta Iztoksson 29.12.2015 - 21:22
fonte

1 risposta

5

Continua a tenere traccia dell'implementazione fuori dai tuoi controllori. Invece, chiama la cosa responsabile della mappatura nel tuo controller.

public ActionResult FetchSomething()
{
    var thingMapper = new ThingMapper();
    var viewModel = thingMapper.ToViewModel(service.FetchSomething());
    return View(viewModel);
}

Naturalmente, se ViewModel è solo una proprietà o due, puoi saltare il mapper.

public ActionResult FetchSomething()
{
    var thing = service.FetchSomething();
    var viewModel = new ThingViewModel { Prop1 = thing.Prop1 };
    return View(viewModel);
}

Con un po 'di fortuna, AutoMapper potrebbe aiutarti a mappare oggetti senza scrivere mappatori personalizzati.

Non memorizzerei l'implementazione della mappatura nei ViewModels stessi. Ciò diventa difficile quando un ViewModel può rappresentare dati da più di una fonte. Inoltre, mescola le responsabilità un po 'troppo per i miei gusti.

    
risposta data 30.12.2015 - 03:20
fonte

Leggi altre domande sui tag