gpt4 book ai didi

asp.net-mvc - 如何在 POST 操作中将 View 模型映射回域模型?

转载 作者:行者123 更新时间:2023-12-02 07:37:53 28 4
gpt4 key购买 nike

互联网上找到的每一篇关于使用 ViewModel 和利用 Automapper 的文章都给出了“ Controller -> View ”方向映射的指导原则。您将域模型与所有选择列表一起放入一个专门的 ViewModel 中,并将其传递给 View 。这很清楚也很好。
View 有一个表单,最终我们处于 POST 操作中。这里,所有模型绑定(bind)器都与[显然]另一个 View 模型一起出现,该 View 模型[显然]与原始ViewModel相关,至少在命名约定部分为了绑定(bind)和验证。

如何将其映射到域模型?

让它成为一个插入操作,我们可以使用相同的自动映射器。但如果这是一个更新操作呢?我们必须从存储库中检索域实体,根据 ViewModel 中的值更新其属性并保存到存储库。

附录 1(2010 年 2 月 9 日):有时,分配模型的属性是不够的。应该根据 View 模型的值对域模型采取一些操作。即,应该在域模型上调用一些方法。也许,应该有一种应用程序服务层位于 Controller 和域之间,以便处理 View 模型......

<小时/>

如何组织此代码以及将其放置在何处以实现以下目标?

  • 保持 Controller 精简
  • 荣誉 SoC 实践
  • 遵循领域驱动设计原则
  • 保持干燥
  • 未完待续...

最佳答案

我使用 IBuilder 接口(interface)并使用 ValueInjecter 实现它

public interface IBuilder<TEntity, TViewModel>
{
TEntity BuildEntity(TViewModel viewModel);
TViewModel BuildViewModel(TEntity entity);
TViewModel RebuildViewModel(TViewModel viewModel);
}

...(实现)RebuildViewModel 只需调用 BuildViewModel(BuilEntity(viewModel))

[HttpPost]
public ActionResult Update(ViewModel model)
{
if(!ModelState.IsValid)
{
return View(builder.RebuildViewModel(model);
}

service.SaveOrUpdate(builder.BuildEntity(model));
return RedirectToAction("Index");
}

顺便说一句,我不写 ViewModel 我写输入,因为它短得多,但这并不重要
希望有帮助

更新:我现在在ProDinner ASP.net MVC Demo App中使用这种方法,现在它被称为 IMapper,还提供了一个 pdf 文件,其中详细解释了这种方法

关于asp.net-mvc - 如何在 POST 操作中将 View 模型映射回域模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2206005/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com