C# 存储库模式最佳实践

C# 存储库模式最佳实践,c#,repository-pattern,C#,Repository Pattern,我很抱歉,因为这个问题很难用好话来表达 我有类似的问题 它是否违反了存储库模式?使用Reposiotry创建的产品是否用于获取所有类别 viewModel.Categories= productRepository.FindAll<Category>(c => c.Id > 0).ToList();//is it Correct with Pattern 在上面的示例中,我需要在产品视图上显示类别,只有diplay no crud(工作单元)将在类别上执

我很抱歉,因为这个问题很难用好话来表达

我有类似的问题

它是否违反了存储库模式?使用Reposiotry创建的产品是否用于获取所有类别

        viewModel.Categories= productRepository.FindAll<Category>(c => c.Id > 0).ToList();//is it Correct with Pattern
在上面的示例中,我需要在产品视图上显示类别,只有diplay no crud(工作单元)将在类别上执行。 那么,这里的最佳实践是什么

Thnaks,

您可能希望在两者之间有一个ServiceLayer。服务层负责将元逻辑与控制器解耦。随着代码变得越来越复杂,存储库需要相互了解,这是不好的。然而,对于服务来说,这是完全可以的。因此,存储库非常轻量级,不了解业务逻辑


然而,ServiceLayer却没有。例如,如果没有
Categories
Collection/Table,但这些类别嵌入到产品中,则不应该存在假装的CategoryRepository。
ProductService
可以提供方法
AllCategories()

谢谢,但是存储库不应该处理自己的类吗?在这里,ProductRepository应该处理所有与产品相关的工作,而不是与类别相关的工作,这取决于您使用类别的方式。如果您使用的是RDMBS,Categories是一个表,并且每个产品都有一个产品的外键,那么
Category
是一个单独的实体,它也有一个
CategoryRepository
。它们通常支持CRUD操作。但是,如果您只为每个产品分配一个自由形式的类别,则没有“添加类别”方法,因此也没有
CategoryRepository
。正如您所说,
ProductRepository
与类别无关,但是
ProductService
可能与类别有关。因此->“对于服务来说,这是完全可以的。存储库非常轻量级,不了解业务逻辑。”
        viewModel.Categories = categoryRepository.GetAll();// getting Categories by creating new instance of categoryRepository