Asp.net mvc 在ASP.NET MVC中查看与模型类类似的模型

Asp.net mvc 在ASP.NET MVC中查看与模型类类似的模型,asp.net-mvc,Asp.net Mvc,如何处理模型类基于SQL表的情况,例如,当使用Entity Framework为您生成实体和数据访问时,但您仍然希望一个或两个属性不同和/或被排除在外 我对使用单独的视图模型类和模型类没有问题,但是越来越多的情况下,它们之间的差异很小。因此,我最终将模型类属性复制到视图模型类,并更改/删除所需的属性 因此,从某种意义上说,我希望遵循单独的模型和视图模型类的模式,但要消除视图和模型之间的依赖关系通常很耗时-我可以在视图中使用模型类。我从不在后期操作中使用域模型(积累用户输入)-嗯,按实体ID绑定到

如何处理模型类基于SQL表的情况,例如,当使用Entity Framework为您生成实体和数据访问时,但您仍然希望一个或两个属性不同和/或被排除在外

我对使用单独的视图模型类和模型类没有问题,但是越来越多的情况下,它们之间的差异很小。因此,我最终将模型类属性复制到视图模型类,并更改/删除所需的属性


因此,从某种意义上说,我希望遵循单独的模型和视图模型类的模式,但要消除视图和模型之间的依赖关系通常很耗时-我可以在视图中使用模型类。

我从不在后期操作中使用域模型(积累用户输入)-嗯,按实体ID绑定到数据库时除外。但我有时会把它们传递给观点。它实际上很糟糕-您看不到视图真正需要什么,并且您经常开始在视图中创建业务逻辑查询-但是当这变得有点糟糕时(例如,视图需要以某种方式将域模型转换为查询/过滤数据),添加视图模型并将其更改为适当的实现是相当容易的。从某种意义上讲,这最多就是KISS/YAGNI——如果它有效并且没有缺点,为什么不呢?将其更改为更复杂的内容,直到情况开始需要它。

您可以简单地将ViewModel作为模型的子类。根据需要,您可以重构ViewModels,甚至从模型中删除其继承


您可以预见将域模型传递到视图的潜在缺点,但如果它对您有效,则没有规则禁止保持简单。

您还可以选择创建一个viewmodel作为模型的简单属性副本,然后依靠类似的方法来处理映射。一般来说,我更喜欢将我的域模型保存在一个单独的程序集中——继承可以工作,但我还没有尝试过。将继承层次结构拉过这个程序集边界似乎有点过分。如果您的ViewModel与域模型相同,或者非常相似,您可以在UI层中使用域模型,那么自动映射甚至派生或创建模型副本可能会有些过分。

子类化实际上是有意义的。我可以有单独的文件/类,并且仍然使用EF中已经存在的实现。当我将来需要它时,我可以删除继承并以另一种方式实现它。