加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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更为重要而失败.

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

我建议只为每个操作创建单独的控制器操作,视图和模型,特别是如果验证要求不同的话.您可以执行一些操作(例如使用部分视图或编辑器模板)来减少重复,但通常不会增加大量复杂性以避免重复.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读