不言自明,例如,我有一个模型与我的数据库进行1:1映射:

public class User
{
    [Key]
    public int UserID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}


如果我在View cshtml中使用此功能,是否有任何缺点:

@model User


或者我应该像这样创建另一个ViewModel

public class UserViewModel
{
    [Required]
    public string FirstName { get; set; }
    [Required]
    public string LastName { get; set; }
}


并将其绑定到我的视图

@model UserViewModel

最佳答案

良好的编程思想是,视图不应该知道数据来自何处……使用视图中的数据库模型会破坏该符号。

最好总是使用ViewModel,将来,您会对此选择感到满意,例如,视图可能只是数据库表中的1:1,但可以想象设计者希望您也添加最近的“消息”,这只是基于用户的新表调用...

使用ViewModel,您可以轻松地添加它,只需编辑视图和控制器,但是如果使用1:1,则需要创建一个全新的ViewModel ...然后,某些视图具有ViewModels,而有些则没有ViewModels。会很乱!

为了帮助您,您始终可以使用AutoMapper来帮助ViewModels构造,AutoMapper会自动使用原始类中的数据填充目标类。

var userViewModel = AutoMapper.Mapper.Map<UserViewModel>(user);


请记住要分开的关注点,Controller不应该知道数据来自何处(因此,使用Repositories),而View应该不进行数据操作(因此,Controller)。

关于c# - 在存储库模式中,我应该将数据库模型用作我的View模型还是应该为此创建单独的ViewModel?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31177550/

10-09 16:18
查看更多