在这篇文章中,Jimmy Bogard继续解释了他在做 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。