在ASP.NET MVC中查看与Model类相似的模型

时间:2010-09-03 18:12:14

标签: asp.net-mvc

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

我有单独的View Model类和Model类没有问题,但是差异很小的情况越来越多。所以我最终将Model类属性复制到View模型类并更改/删除我想要的属性。

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

您预测将域模型传递给您的视图的潜在缺点是正确的,但是如果它适合您,则没有规则可以保持简单。

答案 2 :(得分:0)

您还可以选择创建一个viewmodel作为模型的简单属性副本,然后依靠Automapper之类的东西来处理映射。一般来说,我更喜欢将我的域模型保存在一个单独的程序集中 - 继承可行,我还没有尝试过。在此程序集边界中拉出继承层次结构似乎有点多。如果您的视图模型与您的域模型相同,或者类似,您可以在UI层中使用域模型,那么自动化,甚至派生或创建模型的副本可能会过度。