自我解释,我有一个模型,例如我的数据库以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
答案 0 :(得分:2)
良好编程的想法是,视图不应该知道数据来自何处...使用视图中的数据库模型打破该符号。
最好总是使用ViewModel
,将来你会对这个选择感到高兴,例如,一个View可能只是数据库表中的1:1,但想象一下设计师想要的您还要添加最新的"消息",这只是基于用户的新表呼...
使用ViewModel
,您可以轻松添加它,只需编辑您的视图和控制器,但如果您使用1:1,您将需要创建一个全新的ViewModel ...然后,一些视图具有ViewModel和一些不要......它会很乱!
为了帮助您,您可以随时使用AutoMapper
来帮助构建ViewModel, AutoMapper 使用原始类中的数据自动填充目标类。
var userViewModel = AutoMapper.Mapper.Map<UserViewModel>(user);
请注意单独关注,Controller
不应该知道数据的来源(因此,使用Repositories
),而View不应该进行数据操作(因此Controller
)。
答案 1 :(得分:0)
一般来说,如果我们谈论可扩展性和维护,使用多层体系结构是很好的一点,即使您非常确定您不必显示除实体属性之外的任何其他数据,您也不能说100% 。在您决定显示其他数据的情况下,您必须扩展实体,这肯定是肯定的。另一个原因是事实上不能在解决方案中增加引用,并且通常会失去耦合。在表示层和数据层之间进行引用会非常好。
当然,您的示例非常简单,但肯定不会总是那种场景,因此表示层和数据层之间的直接引用不是一个选项。