Вы должны , а не поместить любую свою логику отображения в слой обслуживания, поскольку она просто не принадлежит ему.Логика сопоставления должна идти внутри вашего контроллера и нигде больше.
Почему вы можете спросить?Достаточно просто, поместив логику сопоставления на ваш сервисный уровень, он должен знать о ViewModels, о которых НИКОГДА не должен знать сервисный уровень, - это также снижает гибкость приложения, в которое вы помещаете логику отображения, поскольку вы не можетеповторно использовать сервисный уровень без большого количества хаков.
Вместо этого вы должны сделать что-то вроде:
// Web layer (Controller)
public ActionResult Add(AddPersonViewModel viewModel)
{
service.AddPerson(viewModel.FirstName, viewModel.LastName)
// some other stuff...
}
// Service layer
public void AddPerson(string firstName, string lastName)
{
var person = new Person { FirstName = firstName, LastName = lastName };
// some other stuff...
}
Поступая так, как описано выше, вы делаете свой сервисный уровень более гибким, поскольку он не привязан копределенного класса, и он не знает о существовании вашей модели представления.
ОБНОВЛЕНИЕ:
Чтобы отобразить ваши сущности, возвращенные из сервисного слоя, в ViewModels, вы можете захотеть взятьвзгляд на Automapper или Значение Injecter .