我是ASP.Net MVC的新手,我有一个问题似乎无法在谷歌上找到答案。
我的页面需要的模型与数据存储在数据库中的方式有很大不同。编写一个可以从数据库模型转换为所需MVC模型(MyModel ConvertToMvcModel(DataFromDatabase d
)的函数对我来说是微不足道的。
我的问题,我应该把这段代码放在哪里?它应该在控制器中吗?它应该在数据访问层中(使用存储库模式)。
另一个相关问题是我应该在哪里放置存储库类?到目前为止,我已经将模型类中的存储库类放在同一个.cs文件中,因为每个模型都有一个相应的存储库。这次模型将与我从存储库中获得的模型不同,因此将它放在同一个文件中没有多大意义。也许我应该将所有DAL(存储库)与模型代码分开。
有什么建议吗?
答案 0 :(得分:1)
我的问题,我应该把这段代码放在哪里?
理想情况下,域模型和视图模型之间的映射应放在单独的专用映射层中。例如,如果您使用我推荐的AutoMapper,您可以将映射定义放在称为配置文件的单独文件中,并在控制器操作内部简单地调用Mapper.Map<TSource, TDest>
方法。
另一个相关问题是我应该在哪里放置存储库类? 到目前为止,我已将存储库类放在模型类的旁边 在同一个.cs文件中,因为每个模型都有一个相应的存储库。
DAL代表数据访问层,是存储库应该去的地方。您可以定义存储库必须遵守的通用契约(接口)(实现),然后针对您正在使用的不同数据源进行多次实现。
答案 1 :(得分:1)
您无论如何都不应该返回实体,为此目的使用ViewModels。
关于映射:您正在寻找的内容已经存在,它被称为AutoMapper。您可以让服务层将实体返回给控制器,控制器会将它们映射到ViewModel对象。
请记住只初始化映射一次,因此从应用程序启动开始映射。