MVC层和DAL&数据层

时间:2014-03-06 06:33:42

标签: asp.net-mvc data-access-layer bll

我一直在开发一个多层MVC应用程序,现在正在回顾我到目前为止所做的工作。特别是现在我已经回去并在多层/层上再次进行了一些阅读(有大量信息但没有真正的一致性或标准),我现在正在质疑我的数据层。

我强烈怀疑我没有错误地实现它(符合良好的设计)并且可能已经切断了。这就是我所做的:

WebUI中

  • 包括控制器,视图模型,视图

BLL

  • 包含包含以下内容的服务类:

    1. 内存中的操作代码,例如集合...
    2. 数据访问代码,例如EF linq to entities。

数据

  • /包含域类的模型文件夹
  • /包含DbContext类的DAL文件夹

...

退后一步,重新审核,这就是我所看到的,以及我在质疑的内容:

  1. 在BLL中,EF代码在这里看起来不正确。它应该在数据层中。有人可以确认吗?

  2. 我的数据层(即数据项目)包含上下文类和域模型。我读过人们将他们的数据层分成a)DAL和b)模型。 因此,我猜DAL层将包含上下文类和数据(EF)代码,而Models层将仅包含域模型。这最终会使您总共有4个层。可能太过分或设计不错?

  3. 任何使用AutoMapper for EF到ViewModel映射的偏好?我目前正在Web层中进行映射,但怀疑它在BLL中可能更整洁。有些映射只能在Web层中完成,例如SelectListItem用于下拉列表。

2 个答案:

答案 0 :(得分:1)

阅读很多,这篇文章与很多信息一致,并回答了我的大部分问题:

http://www.kenneth-truyers.net/2013/05/12/the-n-layer-myth-and-basic-dependency-injection/

  1. EF代码应该在DAL中,而不是BLL。

  2. 移动模型(从DAL中移出)并进入自己的程序集。现在我的数据层有两个程序集:DAL和Model。这可能归结为个人偏好。另外,我更喜欢Web图层仅引用模型程序集,而不是DAL。

  3. 我怀疑我可能在Web和BLL层都有映射。但是要确认一下,当我做到这一点时。

  4. 如果有人有更好更详细的答案,我很乐意接受,否则这篇文章似乎回答了很多与层相关的问题。

答案 1 :(得分:1)

我认为使用ORM(特别是在代码优先方法中)确实使单独的DAL项目变得麻烦(严重的是,与纯ADO.NET DataReader相比,ORM中的DA部分没什么用)。相反,我更愿意制作一个与{em>数据持久性相关的Prj.Domain。基本上它是DAL + Model层或你的组合。

Prj.WebUI将拥有自己的模型(更好地命名为ViewModels),它们仅用作在视图中处理域数据的便捷方式。

从MVC角度来看,Prj.Domain是一个模型,而Prj.WebUI是一个视图和控制器。