我有一个架构问题。我试图建立一个ASP.MVC Web应用程序使用依赖注入来分离数据访问层。问题是 - 模型。解耦ASP.MVC和数据访问层与依赖注入
基本上我有两个解决方案。第一个是MVC Web应用程序,第二个是数据访问层。 DAL具有一些接口,由Entity Framework生成的实现和模型,以及一些其他模型 - 搜索条件和结果。 MVC在使用Ninject注入DAL的基本控制器中有一个属性。
我的担心是 - 我该如何处理模型?
我使用依赖注入的原因是将DAL与主Web应用程序解耦。因此,如果我正确理解DAL应该易于连接/拆卸的想法。但是,如果我在MVC控制器中使用DAL的模型,并且它将完全依赖于DAL中的细微变化。
我在MVC中创建了复制实体框架生成模型的模型,所以我可以在MVC中使用这些MVC模型,并在调用DAL方法之前使用AutoMapper将它们映射到DAL模型,因此仅使用DAL模型在控制器和耦合器中更松散。但它似乎仍然很脏,远非优雅的解决方案。
您认为如何?有什么办法以更聪明的方式处理它?
非常好的主意。总结 - 我试图解耦太多;)。我不知道的事情很简单 - 模型是合同的一部分,是界面的一部分,所以它们不能轻易改变。但有些事情我不确定。请纠正我,如果我错了 - 当我移动模型到普通的我应该 - 在使用EF的情况下 - 重复的实体生成的模型并将它们映射到DAL中,对吗?我的意思是 - DAL接口应该使用通用的模型(即使它只是实体/表模型)。 – Landeeyo 2014-09-25 08:52:31
像下面的答案一样,“有一些开销需要不断地将您的数据模型映射到您的视图模型,以准确提取您在某些视图上需要的内容”。 DAL内部使用EF模型,如用户数据模型,具有后期绑定和负载属性以及虚拟集合,但不包括UI,但UI请求UserEmailViewModel(驻留在Common.dll中),DAL将从其数据模型映射UserEmailViewModel并只返回用户名和电子邮件。所以是的,DAL界面应该返回并在Common.dll中创建模型。它如何映射它们取决于DAL,UI并不在意。 – artm 2014-09-25 09:05:35