Автоматическое сопоставление объектов с моделями через атрибут фильтра действий?

70
6

В в этой статье, Джимми Богард продолжает объяснять некоторые из лучших практик, которые он одобряет при выполнении MVC.


В целом статья довольно хорошая, и я нашел его совет в целом (в других блогах), чтобы быть довольно солидным. Однако он предлагает использовать атрибут для сопоставления объектов с моделями.


Как это


[AutoMap(typeof(Product), typeof(ShowProduct))]
public ActionResult Details(int id)
{
var product = _productRepository.GetById(id);
return View(product);
}

Лучше, чем это (что, на мой взгляд, более декларативно относительно фактического намерения фрагмента кода


public ActionResult Details(int id)
{
var product = _productRepository.GetById(id);
var model = Mapper.Map<Product, ShowProduct>(product);
return View(model);
}

Кроме того, как представляется, сценарии, где это довольно непрактично, например методы действий, возвращающие разные модели на основе ввода или даже более простые сценарии, такие как:


    [HttpGet]
public ActionResult Index()
{
return List();
}

public ActionResult Until(long id) // "id" is the timestamp
{
return List(id);
}

[NonAction]
internal ActionResult List(long? timestamp = null, int count = 8)
{
IEnumerable<Post> posts = postService.GetLatest(timestamp, count);
PostListModel model = mapper.Map<IEnumerable<Post>, PostListModel>(posts);
return ContextView("List", model);
}


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


Я прошу из-за незнания, а не лично нападаю на кого-то, кого я считаю ужасным блоггером, кроме того, я уже люблю AutoMapper.

спросил(а) 2020-04-04T02:05:19+03:00 6 месяцев, 3 недели назад
1
Решение
71

Я занимался поиском по этой теме, а также столкнулся с сообщением Los Techies. Мой следующий поиск привел к этой статье Google Groups в группе пользователей AutoMapper.


Похоже, Джимми отступил от этого указания:

Не используйте фильтр действий. Сначала мы отправились по этому маршруту, но в конечном итоге остановились на результатах пользовательских действий. Это немного проще настроить те фильтры действий, которые делают его довольно гораздо невозможнее предоставить настраиваемое поведение.

НТН,

Джимми


ответил(а) 2020-04-04T02:22:27.145478+03:00 6 месяцев, 3 недели назад
58

Мои мысли по этому поводу заключаются в том, что лучше всего использовать сопоставление действий контроллера, поскольку оно позволяет скрыть некоторые детали фактической реализации сопоставления. Вы также получаете дополнительную гибкость для изменения отображения в одном файле позже, в отличие от изменения этого вызова в 7+ методах действий. Это предполагает чисто базовое действие CRUD. Могут быть специальные случаи использования, когда это не работает и что-то другое в этих случаях подходит для меня.

Это всего лишь мои 2 цента.

ответил(а) 2020-04-04T02:05:19+03:00 6 месяцев, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема