存储库模式的最佳实践?
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
【讨论】:
以上是关于存储库模式的最佳实践?的主要内容,如果未能解决你的问题,请参考以下文章
使用 CDK、AWS 和 Github 私有存储库部署的最佳实践?
将 Play 代码从 git 存储库部署到生产环境的最佳实践是啥?