我一直在开发一个多层MVC应用程序,现在正在回顾我到目前为止所做的工作。特别是现在我已经回去并在多层/层上再次进行了一些阅读(有大量信息但没有真正的一致性或标准),我现在正在质疑我的数据层。
我强烈怀疑我没有错误地实现它(符合良好的设计)并且可能已经切断了。这就是我所做的:
WebUI中
BLL
包含包含以下内容的服务类:
数据
...
退后一步,重新审核,这就是我所看到的,以及我在质疑的内容:
在BLL中,EF代码在这里看起来不正确。它应该在数据层中。有人可以确认吗?
我的数据层(即数据项目)包含上下文类和域模型。我读过人们将他们的数据层分成a)DAL和b)模型。 因此,我猜DAL层将包含上下文类和数据(EF)代码,而Models层将仅包含域模型。这最终会使您总共有4个层。可能太过分或设计不错?
任何使用AutoMapper for EF到ViewModel映射的偏好?我目前正在Web层中进行映射,但怀疑它在BLL中可能更整洁。有些映射只能在Web层中完成,例如SelectListItem用于下拉列表。
答案 0 :(得分:1)
阅读很多,这篇文章与很多信息一致,并回答了我的大部分问题:
http://www.kenneth-truyers.net/2013/05/12/the-n-layer-myth-and-basic-dependency-injection/
EF代码应该在DAL中,而不是BLL。
移动模型(从DAL中移出)并进入自己的程序集。现在我的数据层有两个程序集:DAL和Model。这可能归结为个人偏好。另外,我更喜欢Web图层仅引用模型程序集,而不是DAL。
我怀疑我可能在Web和BLL层都有映射。但是要确认一下,当我做到这一点时。
如果有人有更好更详细的答案,我很乐意接受,否则这篇文章似乎回答了很多与层相关的问题。
答案 1 :(得分:1)
我认为使用ORM(特别是在代码优先方法中)确实使单独的DAL项目变得麻烦(严重的是,与纯ADO.NET DataReader相比,ORM中的DA部分没什么用)。相反,我更愿意制作一个与{em>数据持久性相关的Prj.Domain
。基本上它是DAL
+ Model
层或你的组合。
Prj.WebUI
将拥有自己的模型(更好地命名为ViewModels),它们仅用作在视图中处理域数据的便捷方式。
从MVC角度来看,Prj.Domain
是一个模型,而Prj.WebUI
是一个视图和控制器。