Во-первых, вы действительно не хотите, чтобы ваши доминантные объекты использовались в вашей viewModel.Ваша viewModel должна быть чистой только с примитивами (такими как строки, целые числа ... и т. Д.).Поэтому я бы предложил использовать AutoMapper для сопоставления двух строк реквизита с вашей viewModel.
Со списком выбора есть много способов сделать это, но я могу себе представить, если онисписки свойств, то это не фактические объекты, а объекты-значения.В этом случае создание репозитория для них - это слишком много, и граничит с плохим дизайном.
Я бы поместил 'get' списков свойств в ваш MyModelRepository.Что-то вроде
_myModelRepository.getProperties1For(myModel);
Затем снова включите AutoMap, чтобы получить список выбора.
Редактировать: Как @ M.Radwan указал для сложных моделей домена, я сделаю viewModels insdie viewModels для облегченияmapping.
Модель предметной области -
public class User : Entity
{
public Address Address { get; set; }
}
public class Address
{
public string Street { get; set; }
public string Zip { get; set; }
}
будет отображаться в
public class DetailsViewModel
{
public int Id { get; set; }
public string Name { get; set; }
public AddressViewModel Address { get; set; }
public class AddressViewModel
{
public string Street { get; set; }
public string Zip { get; set; }
}
}
, что, по нашему опыту, является единственной причиной для усложнения вашей viewModel.Мы добавим списки выбора в нашу viewModel, хотя в последнее время мы использовали IEnumerables внутренних viewModels и вызывали пользовательские EditorFor или DisplayFor, чтобы превратить их в выпадающий список / список флажков / переключателей.