C# 将ui属性放在域模型上

C# 将ui属性放在域模型上,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我的web应用程序当前有一个域模型和一个视图模型。域模型几乎是我的数据库的一种表示。因此,当我向表中插入数据时,我就是在插入我的域模型对象。我的视图模型处理如何显示我的ui。所以,如果我在视图模型上有一个属性,它有一个下拉列表,我会给它一个自定义显示属性下拉列表,其中有一个枚举,说明要加载哪种类型的值[DropDownListEnums.Product]。“我的视图模型”还具有显示标签,并使用UIHint为不同的属性调用特定的编辑器模板。我觉得创建视图模型变得越来越重复。我想知道仅仅在我的域模型

我的web应用程序当前有一个域模型和一个视图模型。域模型几乎是我的数据库的一种表示。因此,当我向表中插入数据时,我就是在插入我的域模型对象。我的视图模型处理如何显示我的ui。所以,如果我在视图模型上有一个属性,它有一个下拉列表,我会给它一个自定义显示属性下拉列表,其中有一个枚举,说明要加载哪种类型的值[DropDownListEnums.Product]。“我的视图模型”还具有显示标签,并使用UIHint为不同的属性调用特定的编辑器模板。我觉得创建视图模型变得越来越重复。我想知道仅仅在我的域模型上添加显示属性uihint,displayname=blah是否有什么害处,这样我就可以跳过视图模型,除非有什么特别需要。唯一的另一个解决方案是实际删除html,这样我就使用html.EditorSomeProperty、Model.SomeProperty而不是html.EditorForx=>x.SomeProperty。有什么想法吗?

没有,继续使用视图模型。我承认有时候这看起来有点重复,但那是因为你在处理相似但又非常不同的事情。将UI逻辑添加到实体中是完全不合适的,如果你这样做,它会咬到你。这就是我的假设,它只是重复性很强。我个人不遵循这种方法,因为我更喜欢保持实体和视图模型的不同,但我见过许多人只是创建一个围绕实体的视图模型,允许您将视图特定的代码放在视图模型上,然后直接引用实体作为实际数据的属性。但是,如果您需要自定义属性,例如在一个视图中设置必填字段,而在另一个视图中设置为可选字段,那么这仍然很棘手。我并不推荐这种方法本身,但你可以为一些更直截了当的场景研究一下。