不言自明,例如,我有一个模型与我的数据库进行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/