ASP.NET MVC - 视图模型,域模型和数据模型

时间:2012-11-20 09:00:50

标签: asp.net-mvc asp.net-mvc-3 entity-framework viewmodel domain-model

我在最新的ASP.NET MVC 3项目中使用实体框架。由于它是数据库优先,实体框架生成数据库模型。在我的服务(业务)层I Scaffold(MvcScaffolding)中生成服务方法,视图和控制器。脚手架还会生成域模型。将这些模型绑定到视图时,我使用视图模型

简而言之,我最终使用了三种类型的模型。这个可以吗?视图模型保存在表示层中,域模型保存在业务层中,数据模型保存在存储库层中。

请让我知道你的想法。

2 个答案:

答案 0 :(得分:4)

听起来不错,确实有几个好处。

  1. 您可以从头开始重新创建数据库模型,而不会影响域模型,当然它们的映射方式除外。有些人认为这两者可以合并为一个,但这在很大程度上取决于你的设置。

  2. 单独的视图模型将允许您更自由地更改和创建适合您的视图的新视图模型。它也有助于preventing late loading proxies etc

  3. 许多人也会有一组Dto对象。它们作为一组用于缓存的对象非常有用,如果你有多个UI,也可以说是一个Windows服务。

    Automapper非常受欢迎,可以减轻映射这么多模型的痛苦。

答案 1 :(得分:3)

每个级别的模型之间存在差异,这是很好的。如果您对此模型所做的一切都是将数据从一个图层模型放到另一个图层模型而不进行任何转换和处理,则可以删除多余的模型。在一般情况下,域模型变得多余。

您应该创建单独的视图模型和数据库模型,因为必须能够在不更改视图的情况下从数据库重新创建数据库模型。