ASP.NET предложения MVC ViewModelBuilder

Для чего-либо кроме тривиальных моделей представления я использую разработчика моделей представления, который обрабатывает ответственность генерации объекта модели представления. Прямо сейчас я использую инжекцию конструктора разработчиков в мои контроллеры, но это пахнет немного, так как разработчик действительно зависит, на который выполняется метод действия. Я имею две идеи в виду. Первый вовлек бы пользовательский ActionFilter, разрешающий мне украсить каждый метод действия соответствующим разработчиком использовать. Второе должно было бы добавить переопределение Метода просмотра, который открыт для принятия дженерика.

Это - то, на что в настоящее время похож мой код. Отметьте, разработчик введен через ctor.

    [HttpGet, ImportModelStateFromTempData, Compress]
    public ActionResult MyAccount()
    {
        return View(accountBuilder.Build());
    }

Вот то, на какую опцию можно было бы быть похожей:

    [HttpGet, ImportModelStateFromTempData, Compress, ViewModelBuilder(typeof(IMyAccountViewModelBuilder)]
    public ActionResult MyAccount()
    {
        return View();
    }

Или опция два:

    [HttpGet, ImportModelStateFromTempData, Compress]
    public ActionResult MyAccount()
    {
        return View<IMyAccountViewModelBuilder>();
    }

Любые мысли или предложения были бы большими!

8
задан Jonathan Nixon 15 April 2016 в 21:06
поделиться

3 ответа

TheBuilder

Я думаю, что вы могли бы переложить ответственность за создание правильной модели представления на конструктор. и вы могли бы передать тип ViewModel, который вы хотите построить, в качестве параметра, что-то вроде:

[HttpGet, ImportModelStateFromTempData, Compress]
public ActionResult MyAccount()
{
   return View( AccountBuilder.Build<MyAccountViewModel>( ) );
}

О кандидатах

FirstOptionThis

вышеуказанный подход позволяет вам иметь большую гибкость в представлении, которое вы будете отображать внутри действия (что произойдет, если ваш контроллер должен выбрать между 3 представлениями для показа, и каждое из них имеет свою модель представления? Фильтр решений начинает становиться сложным)

SecondOption

Метод View method отвечает за получение модели и рендеринг представления с ее использованием. Это controller отвечает за построение модели. поэтому, будучи немного ортодоксальным, я бы рекомендовал избегать размещения логики построения модели в методе View : ).

1
ответ дан 6 December 2019 в 02:24
поделиться

Фильтр действий вашей модели представления может смотреть на ожидаемый тип модели в ViewContext вместо того, чтобы требовать его в атрибуте.

0
ответ дан 6 December 2019 в 02:24
поделиться

Если вы спрашиваете мнение, теперь видя ваш код, я бы проголосовал за ваш первый вариант. Я широко использовал фильтры действий, и это приятно - все в одном месте, позволяет легко декорировать действия и т. Д.

0
ответ дан 6 December 2019 в 02:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: