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

时间:2010-08-30 10:27:52

标签: c# design-patterns repository

方案

数据访问层

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

业务层

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

问题

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

感谢您阅读,等待答案

3 个答案:

答案 0 :(得分:7)

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

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

我会把它放在 DAL和BLL之间,只用它来从BLL进行数据访问。

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

我认为存储库接口应该在业务层中,但是该接口的实现应该在数据层中。接口支持单元测试,但是存储库的实现不是业务层的责任。