2010-09-03 57 views
0

如何处理基于SQL表的Model类的情况,例如使用Entity Framework为您生成实体和数据访问时的情况,但您会仍然像一个或两个属性不同和/或排除。在ASP.NET MVC中查看模型与Model类相似

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

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

回答

0

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

你很期待预测将域模型传递给你的观点的潜在缺点,但是如果它适合你的话,保持简单没有任何规则。

+0

子类实际上是有道理的。我可以有单独的文件/类,并仍然使用EF中已经存在的实现。当我将来需要它时,我可以删除继承并以另一种方式实现它。 – mare 2010-09-03 18:56:24

2

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

0

您还可以选择将视图模型创建为模型的简单属性副本,然后依靠类似Automapper的内容来处理映射。一般来说,我更愿意将我的领域模型保留在单独的程序集中 - 继承会起作用,我还没有尝试过。通过这个程序集边界拉取继承层次似乎有点多。如果您的视图模型与您的域模型相同,或者足够类似以至于您可以在UI层中使用域模型,那么automapper甚至可以派生或创建模型的副本可能会过度。

相关问题