存储库模式的最佳实践?

时间:2015-03-09 19:42:00

标签: design-patterns laravel orm repository

在MVC Web应用程序框架的上下文中使用repository pattern来将存储检索的特定机制与Controller分离。

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

  1. 抓住所有问题
  2. 在我们的视图中为表单绑定创建一个简单的问题
  3. 抓住分页问题
  4. 创建并存储问题
  5. 通过主键获取问题
  6. 使用主键和某些数组数据更新问题
  7. 按主键删除问题
  8. 我可以想象更多:

    1. 抓住所有问题并给出答案
    2. 在一定年龄内无需回答所有问题
    3. 使用某些关键词抓住所有问题
    4. 抓取所有标记为垃圾邮件或已删除的问题
    5. 抓住所有提出问题的用户
    6. 基本上,在这种模式下,每个唯一的where子句条件集将有一个方法,这样方法与唯一查询同构。这是坏事吗?是否有更一般的模式可用于防止这种方法爆炸?

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

2 个答案:

答案 0 :(得分:1)

所有查询的共同点是什么?嗯......他们都是查询...... :)他们都接受一些参数并返回一些结构对象。

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

(C#)

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

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

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

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

答案 1 :(得分:0)