2

我一直在开发一个多层 MVC 应用程序,现在回顾一下我到目前为止所做的事情。尤其是现在我已经回去并再次阅读了有关多层/层的大量信息(那里有大量信息,但没有真正的一致性或标准),我现在正在质疑我的数据层。

我强烈怀疑我没有正确地实现它(符合良好的设计)并且可能已经偏离正题。这是我所做的:

网页界面

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

BLL

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

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

数据

  • /Models 包含域类的文件夹
  • /DAL 文件夹,其中包含 DbContext 类

...

退后一步,重新审查,这是我所看到的,也是我所质疑的:

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

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

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

4

2 回答 2

1

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

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

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

  2. 将模型(从 DAL 中移出)移到它自己的组件中。现在我的数据层有两个程序集:DAL 和模型。这可能归结为个人喜好。另外,我希望 Web 层仅引用模型程序集,而不是 DAL。

  3. 我怀疑我可能在 Web 和 BLL 层中都有映射。尚未确认,当我谈到这一点时。

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

于 2014-03-07T03:26:57.167 回答
1

我认为使用 ORM(尤其是在代码优先的方法中)确实使单独的 DAL 项目变得很麻烦(说真的,与纯 ADO.NET DataReader 相比,ORM 中的 DA 部分微不足道)。相反,我更喜欢制作一个Prj.Domain关于数据持久性的内容。基本上它是DAL+Model层或你的组合。

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

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

于 2014-03-07T06:58:49.630 回答