У меня есть класс Service с методом GetProducts(). Это инкапсулирует бизнес-логику и вызывает репозиторий для получения списка продуктов.
My MVC view хочет показать этот список продуктов как MVC SelectList. Где правильное место для этой логики. Кажется, у меня есть 3 варианта:
-
Model
Модель должна выставить свойство под названием
ProductSelectList
. Когда получатель этого свойства вызывается View, модель должна вызыватьService.GetProducts()
и преобразовывать результат в SelectList перед его передачей.Допустимый аргумент: модель должна делать вызовы бизнес-логике и репозиторию. Представление должно просто отображать предопределенные данные. Контроллер не должен быть задействован, за исключением передачи в контекстную информацию.
-
Просмотр
В представлении должен содержаться код, который вызывает
Service.GetProducts()
напрямую и преобразует результат в строку SelectList.Допустимый аргумент: представление должно вызвать эти данные напрямую, поскольку оно специально предназначено для использования в представлении. Нет необходимости привлекать модель или контроллер, так как мы призываем абстрактный метод Service в любом случае, поэтому все остальное просто добавляет дополнительные накладные расходы.
-
контроллер
Контроллер должен сделать вызов
Service.GetProducts()
, преобразовать результаты в SelectList и передать его в Модель, которая должна содержать простое свойствоProductSelectList
. Вид получит доступ к этому свойству для рендеринга.Допустимый аргумент: Контроллер знает, какие параметры необходимо предоставить методу службы, поэтому он должен сделать вызов. Модель должна быть простой заполнитель для данных, заполненных Контроллером. Задача "Просмотр" - просто визуализировать данные из модели.
У меня такое чувство, что правильный ответ Model, но два других делают некоторые разумные моменты. Возможно, я загрязнил воды, уже имея класс обслуживания, который отделен от Модели?
Кто-нибудь хотел бы поделиться своим мнением? Это только вопрос вкуса?