【问题标题】:Call methods between repositories - Repository Pattern存储库之间的调用方法 - 存储库模式
【发布时间】:2009-03-21 19:14:01
【问题描述】:

我在 ASP.NET MVC 应用程序中使用存储库模式(如 https://dotnet.microsoft.com/apps/aspnet/mvc 站点中的示例)。我有两个存储库,一个称为 CategoryRepository,另一个称为 ProductRepository。我还使用了两个服务,即 CategoryService 和 ProductService 来验证和调用存储库方法。我需要 ProductService 中的类别列表,返回类别的方法已经在 CategoryRepository 中实现。我的问题是,从 ProductService 调用 CategoryRepository 中存在的 ListCategories 方法的正确方法是什么?我不想在 ProductRepository 中实现另一个 ListCategories 方法(DRY 哲学)。谢谢。

【问题讨论】:

    标签: asp.net-mvc repository-pattern


    【解决方案1】:

    我建议将类似的存储库整合到一项服务中。因此,如果您正在创建一个电子商务应用程序,请将 ProductRepository、CategoryRepository 等汇总到 CatalogService 之类的东西中,并让它托管所有相关的存储库。

    【讨论】:

    • +1。一般来说,这会给您留下按业务而非实体划分的服务。
    • 那么当目录服务使用 ProductRepo 更新产品并使用 CategoryRepo 在一个服务方法中更新类别时会发生什么?这是否意味着 ProductRepo 更改是在一个事务中完成的,而 CategoryRepo 更改是在另一个事务中完成的?我一直认为回购操作是离散的,除非您也允许 ProductRepo 更改类别。人们在现实世界中做什么?
    【解决方案2】:

    一种选择是为 ProductService 类提供 CategoryService 的实例。

    public class ProductService {
        ICategoryService _categoryService = null;
    
        public ProductService(ICategoryService categoryService) {
            _categoryService = categoryService;
        }
    }
    

    然后您可以从 ProductService 访问类别列表,而无需建立与任何特定 CategoryService 实现的直接耦合。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-07
      • 2012-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多