我应该在哪个层放置我的存储库?

scr*_*pni 7 c# design-patterns repository

脚本

数据访问层

  • EF生成.edmx和类
  • 仅用于访问SQL数据库并将数据传递到业务层

业务层

  • 业务实体:包含所有验证逻辑,用[DataContract]属性标记,以便它们可以作为参数传递给我的Web服务

问题

我想用这种方法使用存储库模式.存储库将包含要对数据库执行的所有CRUD操作,接受和返回业务层实体.这意味着存储库将驻留在业务层中,因为只有业务层可以引用数据层,而不是相反.我还计划在其他项目中使用数据层程序集,这就是为什么我希望在数据层中拥有存储库,而不是业务层(这是该项目特有的).
您有什么推荐的吗?我应该将存储库保留在业务层中,并为每个不同的业务层编写一个存储库吗?或者我应该将存储库保留在数据层内,而不是接受或返回业务实体.
或者,作为替代方案,任何人都可以推荐不同的方法,这将产生更具逻辑性,可扩展的架构吗?

感谢阅读,等待答案

Ode*_*ded 7

存储库是数据层的抽象 - 为您的应用程序提供持久性无知.它应该只处理数据访问,仅此而已.它不应该有任何业务逻辑.

存储库可以并且应该接受并返回DTO(数据传输对象) - 这些是简单对象,它们没有自己的行为,用于在层之间传输数据.

我会把它之间的DAL和BLL,只用它来从BLL的数据访问.


Ste*_*edy 7

我喜欢接受的答案。理想情况下,拥有一个专门用于存储库的完整层听起来是正确的。

但我认为,在传统的三层应用程序(例如“数据->业务->UI”)中,我会将存储库放在数据层中。我将它们放在数据层的原因是因为它们严格处理数据访问。我不会将它们放入业务层的原因是因为它们不应该有任何业务逻辑。