Самоинициализирующийся ViewModel
От: michael_isu Беларусь  
Дата: 03.12.10 07:00
Оценка:
Всем привет.

Вопрос несколько специфичный для 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 сама себя из базы тянет — это порочный путь, хотя сейчас это работает и никаких вроде проблем нет. Какие последствия могут быть от такого варианта реализации?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.