gpt4 book ai didi

c# - 存储库模式 - 全局存储库是个好主意吗?

转载 作者:太空宇宙 更新时间:2023-11-03 10:53:47 26 4
gpt4 key购买 nike

我在 WCF 服务中有以下接口(interface):

  • IProductRepository
  • IFieldRepository
  • IFieldValueRepository
  • ICategoryRepository

我在名为 DatabaseRepository 的单独项目中实现了每一个,而 ProductFieldFieldValue类别 都位于服务和存储库项目之间共享的公共(public)库中。

产品包含字段,字段又包含字段值。我不喜欢我的服务构造函数有 4 个存储库传入的想法,所以我还有 IGlobalRepository,它包含每个其他存储库的属性。我通过将 IGlobalRepository 的具体实现传递给构造函数来实例化我的服务,当服务托管在 IIS 中时,使用基于 Ninject 约定的绑定(bind)来为我处理这个问题。

所以在我的网络服务上 GetProductsByCategory 看起来像这样:

private IGlobalRepository Repo { get; set; }

public IEnumerable<Product> GetProductsByCategory(int CategoryID){
return Repo.ProductRepository.GetByCategory(int CategoryID);
}

这一切都很好,只是产品有字段,字段有值。这是否意味着我需要将 IFieldRepositoryIFieldValueRepository 的具体实现传递给 Repo.ProductRepository

我肯定有人会建议 ProductRepository 也应该负责获取字段数据,但我将它放在一个单独的存储库中,这样我就可以独立于它们所附加的产品来获取字段.

在我开始采用存储库模式之前,我会简单地调用 Field 或 FieldValue 上的静态方法以获得我需要的东西。传递存储库似乎是一种不太优雅的工作方式。

那么现在我的实际问题是:

全局存储库是个好主意吗?我意识到这在一定程度上是主观的,但很想听听其他人的意见,更重要的是,什么是这种情况下的最佳实践。

最佳答案

我认为全局存储库不是一个好主意。

您应该根据使用情况创建存储库定义。所以是的,产品 repo 应该返回所有必需的数据,它与 FieldRepo 或其他 repo 无关。

应用仅与接口(interface)耦合,一个存储库可以实现多个接口(interface)。此外,您可以让不同的具体存储库使用同一个数据库。 repo 的重点不是为每个实体都有一个 repo ,而是为应用程序提供一个接口(interface),以从存在中获取所需的内容。如何在持久性内部构造事物,那是另一回事。

因此,至少作为一个实验,尝试重新定义 repo 接口(interface)以直接返回应用程序需要它的对象,忽略哪个是实体,哪个对象是另一个对象的一部分等等。

然后开始实现具体的 repo 协议(protocol)。请记住,您拥有应用程序需要的模型数量。只有在微不足道的情况下,才有一个模型来统治一切

关于c# - 存储库模式 - 全局存储库是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20288674/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com