- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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/
我有一个 Manage User 事件,它接受一个可选的用户 ID 并显示一个用户编辑屏幕。这个屏幕有一个 manageUserViewModel 。 我的管理页面有一些依赖项 - 例如,页面标题、提
我是一名优秀的程序员,十分优秀!