Всем привет.
Вопрос несколько специфичный для asp.net mvc, но решил задать его тут, т.к. концептуальности в нем кажется больше.
Вот первый вариант реализации экшена:
public class CompanyController : BaseController
{
public ActionResult ProductList(ProductListRequest request)
{
request.Company = Company;
return View("products/list", new ProductListModel(request));
}
}
Где ProductListModel:
public class ProductListModel
{
public ProductListModel(ProductListRequest request)
{
Contract.Requires(request != null);
Request = request;
Products = Repositories.Products.Select(request.Company, request.ProductTypes);
ProductTypes = Repositories.ProductTypes.Select(request.Company.Evaluate(v => v.Speciality));
}
#endregion
#region Instance Properties
public ProductListRequest Request { get; private set; }
public IEnumerable<Product> Products { get; private set; }
public IEnumerable<ProductType> ProductTypes { get; private set; }
#endregion
}
Второй вариант:
public class ProgramsController
{
public ActionResult ResultWinners(int resultNum, int nextPage)
{
return RetryOnDeadlockReadOnly(context =>
{
var model = new ProgramWinnersViewModel();
model.SelectedMainMenuItem = MainMenuItem.ProgramResults;
bool nextPageExists;
model.Winners = context.Repositories
.Get<EpiquePrizesWonRepository>()
.GetWinnersData(nextPage, model.MaximumRows, out nextPageExists);
model.NextPage = nextPageExists ? nextPage + 1 : (int?)null;
return View("Result" + resultNum + "Winners", model);
});
}
}
Где ProgramWinnersViewModel:
public class ProgramWinnersViewModel : MainMasterPageViewModel
{
public ProgramWinnersViewModel()
{
Winners = new SortedDictionary<string, IList<string>>();
MaximumRows = 20;
}
public SortedDictionary<string,IList<string>> Winners { get; set; }
public int MaximumRows { get; private set; }
public int? NextPage { get; set; }
}
Вопрос — какой вариант реализации предпочтелен и почему? Мне кажется, что в первом варианте, когда ViewModel сама себя из базы тянет — это порочный путь, хотя сейчас это работает и никаких вроде проблем нет. Какие последствия могут быть от такого варианта реализации?