Вопрос

Насколько я понимаю, модели домена - это классы, которые описывают только данные (совокупные корни). Это Pocos и не ссылаются на внешние библиотеки (ничего особенного).

Просмотр моделей, с другой стороны, являются классы, которые содержат объекты доменных моделей, а также все конкретные объекты интерфейса, такие как SelectList. Отказ ViewModel включает в себя using System.Web.Mvc;.

Репозиторий вытягивает данные из базы данных и передает их нам через объекты доменных моделей. Какой механик или устройство создают объекты модели вида, заполняя их из базы данных? Будет ли это фабрика, имеющая доступ к базе данных? Будете ли вы кровоточить вид на конкретные классы, такие как System.Web.mvc в репозитории? Что-то другое?

Например, если у вас есть выпадающий список городов, вы бы ссылаетесь на объект SelectList в корне своего объекта модели вашего представления, прямо рядом с ссылкой DomainModel:

public class CustomerForm {
    public CustomerAddress address {get;set;}
    public SelectList cities {get;set;}
}

Города должны поступать из базы данных и находиться в виде объекта выбора списка. Надежда заключается в том, что вы не создаете специальный метод репозитория для извлечения только в отдельных городах, а затем создают избыточный второй объект SELECTLIST, чтобы у вас есть правильные типы данных.

Это было полезно?

Решение

Автомат Можно использовать для преобразования ваших моделей на модели просмотра. Вот очень хорошая статья о том, как вы можете использовать его в вашем приложении ASP.NET MVC.

В основном ваш контроллер может выглядеть так:

[AutoMap(typeof(ProductModel), typeof(ProductViewModel))]
public ActionResult Index(int id)
{
    return View(_repository.GetById(id));
}

Так что вы все еще работаете с вашим доменными моделями в контроллере и AutoMap Фильтр действий будет использовать AutoMapper Чтобы преобразовать модель в модель просмотра в соответствии с отображением файла и пропустите его на вид.

Другие советы

Я бы предложил вам посмотреть на CQRS (сегрегация ответственности за запрос команды). Исходя из этого шаблона, вам не нужно принять вашу модель от репозитория, затем сопоставьте его на ViewModel.

Вы можете посвятить отдельный набор классов для получения данных (запросы) и отображения на виду. Вы можете назвать эти классы поставщики или все, что вам нравится. Эти классы могут вернуть ViewModel или общие наборы набора данных / DataTable. В этом подходе есть 2 преимущества:

1- Вам не нужно беспокоиться о сопоставлении между моделью и ViewModel, поэтому более легкое кодирование и обслуживание. 2- Много раз свойства вашей модели не совсем то, что ожидает пользователю, чтобы увидеть на экране. Некоторые разработчики добавляют новые свойства для их модели только с целью отображения, что заставляет модель потерять свою реальность в долгосрочной перспективе. Возвращая ViewModel или DataSet / DataTable прямо у вашего провайдера, не будучи зависимым от вашей модели, вы разрешаете вашу модель и ваши просмотра, чтобы эволюционировать отдельно.

Мош

Я бы сказал, что заполнение модели видов из объекта домена является ответственностью контроллера. Контроллер «Get» Action будет извлекать объект домена из репозитория, создать модель просмотра, заполнить модель просмотра, а затем пропустите ее на вид.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top