我有以下设置:流利的nhibernate + asp.net mvc 4。 我在VS中有一个单独的项目,我的所有对象都存储在这里,这些对象直接映射到数据库。
但是,要在视图中显示这些对象的数据,我需要'模型'。
我是否需要基于这些数据库映射对象创建新的模型对象,或者我可以将这些数据库对象作为模型传递给视图? (这是一个好主意吗?)
谢谢!
答案 0 :(得分:2)
在我看来,您应该创建其他ViewModel类。如果要对显示的数据进行一些更改,则更容易修改这些模型;您的域映射不会受到某些特定“渲染”情况的影响。
另一个优点是您可以使用格式化属性修饰属性,而不会在依赖于您的域的未来项目上强制执行这些设置。
例如,假设您的基础项目中有以下Customer
类:
public class Customer
{
public string Name { get; set; }
public string Address { get; set; }
}
您可以在[Required]
属性上添加Name
属性以使其成为必需属性。如果对于特定项目,您还需要强制Address
属性,您可以使用另一个[Required]
属性来装饰它。如果直接使用域模型类,则会强制要求始终需要Address
属性,即使项目要求不会说明这一点。这可以进一步扩展到不同的验证属性以及您可能希望与模型一起发送到视图的其他数据(例如复合字段)。
答案 1 :(得分:0)
这主要是一个取决于项目规模等的设计决策。如果没有太多细节,简短的答案是肯定的,你可以直接在你的视图中使用你的数据库对象/模型。
如果您只想显示字段的子集,或者在视图中执行与数据库不同的验证,则有时可能需要创建特定的视图模型。然后,您可以在控制器中验证此视图模型,如果一切正常,请将其映射到nHibernate模型。