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

asp.net – 我仍然犹豫使用ViewModels而不是View for Model

发布时间:2020-12-16 07:11:13 所属栏目:asp.Net 来源:网络整理
导读:我使用Automapper或手动映射,它不起作用. ReleaseViewModel的所有数据必须首先在Release中,因为它随数据访问层填充. 90%的模特都是这样的.为什么重复一切的开销? KISS原理和过度工程怎么样? 当然,每个工具都适合其适当的任务,但我经常读到,在asp.net mvc
我使用Automapper或手动映射,它不起作用.

ReleaseViewModel的所有数据必须首先在Release中,因为它随数据访问层填充. 90%的模特都是这样的.为什么重复一切的开销?

KISS原理和过度工程怎么样?

当然,每个工具都适合其适当的任务,但我经常读到,在asp.net mvc中不使用ViewModel是NO-GO.

在哪里划线?当我们从模型中区分到50%,75%或99%时,我应该使用ViewModels吗?

我有一个模型发布:

public class Release
    {      
        public int Id { get; set; }       
        public string Name { get; set; }
        public string Author { get; set; }
        public DateTime CreatedAt { get; set; }
        public int FailedTestsCount { get; set; }
        public int SucceededTestsCount { get; set; }
        public int SumTestsCount
        {
            get
            {
                return SucceededTestsCount + FailedTestsCount;
            }
        }
        public int SumTestingTime { get; set; }
    }

一个viewmodel ReleaseViewModel:

public class ReleaseViewModel
{
    [HiddenInput(DisplayValue = false)]
    public int Id { get; set; }

    [Required(ErrorMessage = "Name must not be empty.")]
    [StringLength(30,ErrorMessage = "Enter max. 30 chars for a name.")]
    [Remote("ReleaseExists","Release",ErrorMessage = "This name already exists.")]
    public string Name { get; set; }    
    public string Author { get; set; }    
    public DateTime CreatedAt { get; set; }    
    public int FailedTestsCount { get; set; }    
    public int SucceededTestsCount { get; set; }    
    public int SumTestsCount 
    {
        get
        {
            return SucceededTestsCount + FailedTestsCount;
        }
    }

    public int SumTestingTime { get; set; }
}

解决方法

ViewModel适用于VIEW.大部分时间它与您的实体模型类似.但不总是.

看看你的例子.在ViewModel中,您具有“远程属性”和一些“验证”属性.因此,您可以添加此远程名称检查,以便为用户提供更好的用户体验.它特定于View.

您需要Viewmodel的另一个场景是用于涉及多个模型的屏幕.例如:您有一个用户实体和一个项目实体,并且您想要提供一个可以将项目添加到用户的屏幕.所以在这种情况下,您可以创建一个viewmodel来处理它

public class ProjectToUserVM
{
  public int UserId { set;get;}
  public string UserName { set;get;}  // i want to display only name of user!
  public int ProjectID { set;get;}
  public IEnumerable<SelectListItem> Projects { set;get}
}

不要将ViewModel用于所有模型实体.当您的VIEW确实需要时创建它.我在一些视图中直接使用我的Model实体对象,而不创建一个viewmodel,因为它们完全相同.例如:国家/州/市(查找表数据.无添加/编辑)

(编辑:李大同)

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

    推荐文章
      热点阅读