存储库模式的最佳实践?

Posted

技术标签:

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

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

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

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

我可以想象更多:

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

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

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

【问题讨论】:

【参考方案1】:

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

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

(C#)

public interface IQueryHandler<TQuery, TResult> where TQuery : IQuery<TResult>

    TResult Handle(TQuery query);

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

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

Meanwhile... on the query side of my architecture

Meanwhile... on the command side of my architecture

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

【讨论】:

【参考方案2】:

在这里你会找到你的解决方案:

benefits using repositories

eloquent tricks better repositories

creating flexible controllers in laravel 4 using repositories

【讨论】:

以上是关于存储库模式的最佳实践?的主要内容,如果未能解决你的问题,请参考以下文章

在 git 存储库中处理密码的最佳实践是啥?

使用 CDK、AWS 和 Github 私有存储库部署的最佳实践?

将 Play 代码从 git 存储库部署到生产环境的最佳实践是啥?

最佳实践:在 MVC 控制器中使用多个存储库是不是可以接受?

源代码管理最佳实践 - 定期从存储库更新工作副本

21条最佳实践,全面保障 GitHub 使用安全