gpt4 book ai didi

asp.net-mvc-4 - 如何让你的 MVC Controller 在 Edit->Save->ValidateFail 中保持干燥

转载 作者:行者123 更新时间:2023-12-04 20:45:41 29 4
gpt4 key购买 nike

我有一个 Manage User 事件,它接受一个可选的用户 ID 并显示一个用户编辑屏幕。这个屏幕有一个 manageUserViewModel 。

我的管理页面有一些依赖项 - 例如,页面标题、提交到什么方法等。

如果我验证失败,我需要再次显示管理屏幕,但这一次,使用传递给相同方法的 View 模型。

在失败场景中提供这些依赖关系并不是很枯燥。

如何逐步重复依赖项?我尝试将它们放入单独的方法中,但这感觉不对。

public ActionResult Manage(Guid? UserID)
{
User user = this._UserLogic.GetUser(UserID);

ViewBag.Title = "User List";
ViewBag.OnSubmit = "Save";
ManageUserViewModel uvm = Mapper.Map<User, ManageUserViewModel>(user);

return View("Manage", uvm);
}


[AcceptVerbs("POST")]
public ActionResult Save(ManageUserViewModel uvm)
{
User user = this._UserLogic.GetUser(uvm.UserID);


if (!ModelState.IsValid)

// This is not very DRY!!!
ViewBag.Title = "Manage User";
ViewBag.OnSubmit = "Save";
return View("Manage", uvm);
}

Mapper.Map<ManageUserViewModel, User>(uvm, user );

this._UserLogic.SaveUser(user);

return RedirectToAction("Manage", new { UserID = user.ID });

}

最佳答案

我想你误解了 DRY。 DRY 并不意味着“永远不要重复自己”,它意味着你不应该在有意义的时候重复自己。

不同的 View 有不同的要求,为了避免重复自己而创建一个复杂的结构违反了其他最佳实践,如 KISS 和 SRP。

SOLID 很有趣,因为单一职责原则通常与“不要重复自己”不一致,您必须找到平衡点。在大多数情况下,DRY 会失败,因为 SRP 更为重要。

在我看来,您在这里的代码处理多个职责,这样您就可以避免多次编写类似的代码。我不同意这样做,因为每个 View 都有不同的职责和不同的要求。

我建议只为每个 Action 创建单独的 Controller Action 、 View 和模型,特别是当它们的验证要求不同时。您可能可以做一些事情(例如使用局部 View 或编辑器模板)来减少重复,但通常不要为了避免重复而增加太多复杂性。

关于asp.net-mvc-4 - 如何让你的 MVC Controller 在 Edit->Save->ValidateFail 中保持干燥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18345068/

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