asp.net-mvc-4 – 如何让你的MVC控制器DRY为Edit-> Save->
发布时间:2020-12-15 19:46:39 所属栏目:asp.Net 来源:网络整理
导读:我有一个管理用户事件,它采用可选的用户ID并显示用户编辑屏幕.这个屏幕有一个manageUserViewModel. 我的“管理”页面有一些依赖项 – 例如,PageTitle,要提交的方法等. 如果我验证失败,我需要再次显示管理屏幕,但这一次,使用传递到同一方法的视图模型. 在失败
我有一个管理用户事件,它采用可选的用户ID并显示用户编辑屏幕.这个屏幕有一个manageUserViewModel.
我的“管理”页面有一些依赖项 – 例如,PageTitle,要提交的方法等. 如果我验证失败,我需要再次显示管理屏幕,但这一次,使用传递到同一方法的视图模型. 在失败场景中提供这些依赖关系并不是很干. 如何重复依赖关系?我尝试将它们放入一个单独的方法中,但这感觉不对. 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并不意味着“永远不要重复自己”,这意味着你不应该在没有意义的情况下重复自己.
不同的观点有不同的要求,创建一个复杂的结构只是为了避免重复自己违反其他最佳实践,如KISS和SRP. SOLID很有意思,因为单一责任原则经常与不要重复自己不一致,你必须想出一个平衡点.在大多数情况下,DRY会因为SRP更为重要而失败. 在我看来,你在这里有代码处理多个职责,这样你就可以避免多次编写类似的代码.我不同意这样做,因为每个观点都有不同的责任和不同的要求. 我建议只为每个操作创建单独的控制器操作,视图和模型,特别是如果验证要求不同的话.您可以执行一些操作(例如使用部分视图或编辑器模板)来减少重复,但通常不会增加大量复杂性以避免重复. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 用于访问Gravatar图像的ASP.NET MVC帮助器
- ASP.NET Web部件:非IE浏览器中的拖放支持
- asp.net-mvc-4 – 如果用户尝试通过URL访问其他网站页面,如
- asp.net – 会话状态超时与空闲超时
- asp.net – CSS文件引用了两次
- asp.net-mvc – ASP.NET MVC路由和静态数据(即图像,脚本等)
- asp.net – 如何删除日历的最后一周
- asp.net – 执行sql脚本而不是等待完成
- asp.net-mvc – MVC WebApi不使用AutofacWebApiDependencyR
- ASP.NET MVC中的runat =“server”标签的状态是什么?
推荐文章
站长推荐
热点阅读