c# - 我应该把我的存储库放在哪一层?

标签 c# design-patterns repository

场景

数据访问层

  • > EF 生成的 .edmx 和类
  • > 仅用于访问 SQL 数据库并将数据转发给业务层

业务层

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

问题

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

感谢阅读,期待答案

最佳答案

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

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

我会把它放在 DAL 和 BLL 之间,并且只将它用于 BLL 的数据访问。

关于c# - 我应该把我的存储库放在哪一层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3599541/

相关文章:

ruby-on-rails - 每个 rails 命令上的致命 : Not a git repository (or any of the parent directories): . git 但 git 命令工作正常

maven-2 - 在 Github 中托管我的 jars,并依赖于 Maven 存储库

C# dt.Compute() 在某些乘法上不能正常工作

java - 根据对象的属性将对象归为特定类型

c# - 无法理解为什么无法编译对象初始化程序中的数组初始化程序

java - 转换实现相同接口(interface)的类的快速方法

java - Java的“ friend ”等价物?

git - 您可以在单个存储库中为每个目录添加额外的 .gitignore 吗?

c# - .net Windows Azure WebApp 与 cshtml 配合使用所需的最低配置是什么?

c# - 我正在使用 PdfSharp,找不到类 BeginBox 它在哪里?