【问题标题】:Best practice around the repository pattern?存储库模式的最佳实践?
【发布时间】:2015-03-09 19:42:00
【问题描述】:

repository pattern 用于 MVC Web 应用程序框架的上下文中,以将特定的存储检索机制与控制器分离。

每当我最终使用这种模式时,每个唯一查询都会导致存储库类中的方法爆炸式增长。例如,在我之前链接的文章中,有 7 个:

  1. 收集所有问题
  2. 在我们的视图中为表单绑定创建一个简单的问题
  3. 抓住分页问题
  4. 创建和存储问题
  5. 按主键获取问题
  6. 使用主键和一些数组数据更新问题
  7. 按主键删除问题

我可以想象更多:

  1. 用答案抓住所有问题
  2. 抓住所有超过一定年龄没有答案的问题
  3. 抓住所有带有特定关键词的问题
  4. 抓取所有标记为垃圾邮件或已删除的问题
  5. 获取所有提出问题的用户

基本上,在这种模式下,每个唯一的 where 子句条件集都会有一个方法,因此这些方法与唯一查询是同构的。这是坏事吗?是否有更通用的模式可以应用来防止这种方法的爆炸式增长?

(12) 提出了一个相关问题 - 问题存储库是否应该泄露问题与用户之间的关系的详细信息?

【问题讨论】:

    标签: design-patterns laravel orm repository


    【解决方案1】:

    所有查询的共同点是什么?嗯...它们都是查询... :) 它们都接受一些 parameters 并返回一些 structure 对象。

    您可以创建一个通用抽象接口/类来利用这一事实:

    (C#)

    public interface IQueryHandler<TQuery, TResult> where TQuery : IQuery<TResult>
    {
        TResult Handle(TQuery query);
    }
    

    它不仅可以帮助您解耦和抽象您提到的所有类型的查询,它在依赖注入和应用横切关注点方面也非常有用。

    教我的这两篇文章详细解释:

    它在 C# 中,但您可以在每种支持模板的语言(c++、java 等)中创建镜像实现

    【讨论】:

      【解决方案2】:
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-21
      • 2015-10-11
      • 2012-04-01
      • 1970-01-01
      相关资源
      最近更新 更多