当MVC的模型与数据库模型不匹配时,我应该如何构造我的代码?

时间:2012-05-21 21:33:16

标签: asp.net-mvc model-view-controller design-patterns

我是ASP.Net MVC的新手,我有一个问题似乎无法在谷歌上找到答案。

我的页面需要的模型与数据存储在数据库中的方式有​​很大不同。编写一个可以从数据库模型转换为所需MVC模型(MyModel ConvertToMvcModel(DataFromDatabase d)的函数对我来说是微不足道的。

我的问题,我应该把这段代码放在哪里?它应该在控制器中吗?它应该在数据访问层中(使用存储库模式)。

另一个相关问题是我应该在哪里放置存储库类?到目前为止,我已经将模型类中的存储库类放在同一个.cs文件中,因为每个模型都有一个相应的存储库。这次模型将与我从存储库中获得的模型不同,因此将它放在同一个文件中没有多大意义。也许我应该将所有DAL(存储库)与模型代码分开。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

  

我的问题,我应该把这段代码放在哪里?

理想情况下,域模型和视图模型之间的映射应放在单独的专用映射层中。例如,如果您使用我推荐的AutoMapper,您可以将映射定义放在称为配置文件的单独文件中,并在控制器操作内部简单地调用Mapper.Map<TSource, TDest>方法。

  

另一个相关问题是我应该在哪里放置存储库类?   到目前为止,我已将存储库类放在模型类的旁边   在同一个.cs文件中,因为每个模型都有一个相应的存储库。

DAL代表数据访问层,是存储库应该去的地方。您可以定义存储库必须遵守的通用契约(接口)(实现),然后针对您正在使用的不同数据源进行多次实现。

答案 1 :(得分:1)

您无论如何都不应该返回实体,为此目的使用ViewModels。

关于映射:您正在寻找的内容已经存在,它被称为AutoMapper。您可以让服务层将实体返回给控制器,控制器会将它们映射到ViewModel对象。

请记住只初始化映射一次,因此从应用程序启动开始映射。