Mapeando modelos de domínio para ViewModel

5

Eu tenho um aplicativo Asp.net MVC5 estruturado assim:

Core

  1. Projeto de domínio

Infraestrutura

  1. projeto DAL
  2. Utilitários

IU

  1. Projeto UI (contém ViewModel no momento, provavelmente colocará isso em um projeto separado, pois espero que o aplicativo cresça tempo)

Funciona através da Unidade de trabalho e de um repositório genérico, injetado com o Unity.

Minha pergunta é:

Estou estritamente tentando usar o ViewModels para minhas exibições da interface do usuário, onde devo colocar a lógica para mapear o modelo de domínio < = > ViewModel?

Devo fazê-lo no Controller ou talvez colocar a lógica de mapeamento no próprio ViewModel e criar os métodos ViewModel.FromDomainObject (DomainObject domainObject) ou ViewModel.ToDomainObject (ViewModel viewModel) etc??

    
por Iztoksson 29.12.2015 / 21:22
fonte

1 resposta

5

Mantenha o mapeamento da implementação fora dos seus controladores. Em vez disso, chame a coisa responsável pelo mapeamento em seu controlador.

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

Claro, se o seu ViewModel é apenas uma propriedade ou duas, você pode pular o mapeador.

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

Com um pouco de sorte, o AutoMapper pode ajudá-lo a mapear objetos sem escrever mapeadores personalizados.

Eu não armazenaria a implementação do mapeamento nos próprios ViewModels. Isso fica estranho quando um ViewModel pode representar dados de mais de uma fonte. Ele também mistura responsabilidades demais para o meu gosto.

    
por 30.12.2015 / 03:20
fonte