Как обрабатывать несколько ссылок на ViewModel без захвата данных в конструкторе ViewModel? - PullRequest
0 голосов
/ 16 сентября 2018

Я создаю свое первое приложение MVC. Я знаю, что не должен запрашивать данные в конструкторе ViewModel из-за разделения интересов, и в настоящее время я выполняю рефакторинг приложения для исправления ViewModels (я передавал им dbContext). В то же время я хочу избежать повторения. У меня есть ViewModels, которые используются в других ViewModels и действиях контроллера.

Как мне этого добиться?

В этой модели представления использовался конструктор, который запрашивал базу данных с использованием DbContext и присваивал извлеченные списки свойствам:

BusinessClientRelationshipsViewModel.cs

public class BusinessClientRelationshipsViewModel
{
    public int BusinessId { get; set; }
    public IEnumerable<SelectListItem> Clients { get; set; }
    public IEnumerable<SelectListItem> Businesses { get; set; }
    public IEnumerable<SelectListItem> Relationships { get; set; }
    public IEnumerable<RelatedClientsListViewModel> RelatedClientsList { get; set; }
}

Я избавился от DbContext и ввел шаблон репозитория / единицы работы. Я также удалил конструктор из ViewModel. В моем контроллере я инициализирую ViewModel так:

BusinessClientRelationships.cs

public ActionResult List(int id)
{
    var viewModel = new BusinessClientRelationshipsViewModel()
    {
        BusinessId = id,
        RelatedClientsList = _unitOfWork.ClientBusinessRelationships.GetRelatedClientsList(id),
        Clients = _unitOfWork.Clients.GetSelectListItems(),
        Businesses = _unitOfWork.Businesses.GetSelectListItems(),
        Relationships = _unitOfWork.Relationships.GetSelectListItems()
    };

    return View("_BusinessClientRelationships", viewModel);
}

Однако у меня также есть другие ViewModel (для родительских представлений), использующие ViewModel выше (для частичного представления). Моя проблема в том, что я не знаю, как правильно инициализировать BusinessClientRelationshipsViewModel (без повторения каждый раз, когда я делаю это):

BusinessDetailsViewModel.cs

public class BusinessDetailsViewModel
{
    public Business Business { get; set; }
    public BusinessClientRelationshipsViewModel BusinessClientRelationshipsViewModel { get; set; }
    public BusinessAddressChangesViewModel BusinessAddressChangesViewModel { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...