Я только начал использовать дизайн модели View & Domain в своем веб-приложении MVC, но у меня возник вопрос, где выполнять вычисления и другие действия, связанные с View.Ниже я попытаюсь привести пример.
Модель моего домена (Linq2Sql)
public class Product
{
public int Id;
public string Name;
}
Модель представления с новым свойством UserCount
, которое я хотел бы рассчитать.
public class ProductViewModel
{
public int Id;
public string Name;
public int UserCount;
}
Действие моего контроллера выглядит как
public ActionResult _SelectionClientSide_Products()
{
IQueryable<Product> products = _repository.GetProducts(true);
var model = Mapper.Map<IEnumerable<Product>, IEnumerable<ProductViewModel>>(products);
return View(model);
}
Я запрашиваю данные с использованием метода репозитория и получаю IQueryable<Product>
и отображаю его в списке ProductViewModel
.Но мне также нужно выполнить еще одну операцию запроса, чтобы подсчитать количество пользователей для каждого запрашиваемого продукта и назначить все значения для ProductViewModel.Какой дизайн мне следует придерживаться, чтобы добиться этого?
Соотношение между таблицами
Products -> Orders - > Users
EDIT
Я решил удалить AutoMapper, потому что он даетбольше проблем, чем выгод, и создал свой собственный Строитель, который содержит все, что мне нужно.Я делаю назначение поля, а также добавляю расчет.
public ActionResult _SelectionClientSide_Products()
{
Data = new ProductViewModelBuilder(_repository).Build();
return View(Data);
}
namespace PC.Models
{
public class ProductViewModel
{
public int Id { get; set; }
public string Name { get; set; }
public int UsersCount { get; set; }
}
public class ProductViewModelBuilder
{
private readonly IDataAccess _repository;
public ProductViewModelBuilder(IDataAccess repository)
{
_repository = repository;
}
public IQueryable<ProductViewModel> Build()
{
return _repository.GetProducts().Select(p=> new ProductViewModel
{
Id = p.Id,
Name = p.Name,
UsersCount = _repository.CountUsers(p.Id)
});
}
}
}