存储库模式实现

2024-02-23

似乎我找到的存储库模式的每个示例,其实现都在某种程度上有所不同。下面是我主要找到的两个例子。

interface IProductRepository
{
    IQueryable<Product> FindAll();
}

通常还有另一层与存储库通信并调用 FindAll() 方法并执行任何操作,例如查找以字母 's' 开头的产品或获取特定类别中的产品。

我发现很多的另一个例子将所有的 find 方法放入存储库中

interface IProductRepository
{
    IEnumerable<Product> GetProductsInCategory(int categoryId);
    IEnumerable<Product> GetProductsStartingWith(string letter);
    IEnumerable<PromoCode> GetProductPromoCodes(int productId);
}

您建议我走哪条路?或者说它们之间有什么优点/缺点?

据我阅读后的理解http://martinfowler.com/eaaCatalog/repository.html http://martinfowler.com/eaaCatalog/repository.html第一种方法似乎最能反映这一点?


第一个是可怕的。IQueryable就像一个上帝对象 http://en.wikipedia.org/wiki/God_object。确实很难找到 100% 完整的实现(即使在所有 OR/M 中)。你可以直接公开你的 ORM 而不是使用它,因为你可能会得到一个抽象层泄漏 http://en.wikipedia.org/wiki/Leaky_abstraction否则。

乔尔说得最好(文字来自维基百科文章 http://en.wikipedia.org/wiki/Leaky_abstraction):

在 Spolsky 的文章中,他提请注意许多在大多数情况下都有效的抽象示例,但其中底层复杂性的细节不容忽视,从而将复杂性推入了本应通过抽象本身来简化的软件中

乔尔斯博客条目 http://www.joelonsoftware.com/articles/LeakyAbstractions.html

第二种方法更容易实现并保持抽象完整。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

存储库模式实现 的相关文章

  • C中函数指针的递归声明

    我想声明一个返回指向相同类型函数的指针的函数 我想用它来实现如下状态机 typedef event handler t event handler t event t compilation error event handler t st
  • “字符串”是什么意思?信息'

    我刚刚在查看定义时发现了这个PlatformNotSupportedException class 什么是string message意思是 据我所知是 是缩写Nullable lt gt but Nullable lt gt 只能应用于结
  • is_integral 与 is_integer:其中之一是多余的吗?

    是积分 http en cppreference com w cpp types is integral and 是整数 http en cppreference com w cpp types numeric limits is inte
  • binary_log_types.h:没有这样的文件或目录

    我正在编译一个小型 mysql C 项目并且 遇到以下错误 C Program Files x86 MySQL MySQL Server 5 7 include mysql com h 22 30 fatal error binary lo
  • 在 C# 中轻松创建支持索引的属性

    在 C 中我发现索引属性 http msdn microsoft com en us library aa288464 VS 71 aspx非常有用 例如 var myObj new MyClass myObj 42 hello Conso
  • 为什么这个 oracle 批量插入不起作用?

    我正在尝试将一些数据批量插入到 oracle 数据库中 我按照文档中的示例进行操作 this DataBaseAccess new OracleConnection connString var dataAdapter new Oracle
  • 比较 LINQ to SQL 中的两个日期

    我有一个数据库 其中有一个名为会议的表 会议日期使用以下格式存储在此表中 May 2nd 2011 例如 格式为5 2 2011 我的要求是获取两个日期 例如 2011 年 4 月 25 日和 2011 年 5 月 2 日 之间的会议 并编
  • & 运算符的含义是什么?

    在下面的代码中 Expression
  • 函数指针上的未知类型 F TYPE

    include
  • EF Core 一对多关系列表返回 null

    我正在尝试学习如何在 EF Core 中正确利用 DbContext 我有一个团队课程 public class Team public int ID get set public string Name get set public bo
  • ASP.NET中如何访问除wwwroot以外的位置

    我可以使用访问服务器的物理位置Server MapPath 这给了我内部的物理路径wwwroot文件夹 我想将一些数据保存到同一服务器的另一个驱动器中D 驾驶 我想我无法获取以下位置的物理位置D 驾驶使用Server MapPath因为它位
  • 除空字符串外的任何内容的正则表达式

    是否可以使用正则表达式来检测任何不是 空字符串 的内容 如下所示 string s1 string s2 string s3 string s4 etc 我知道我可以使用修剪等 但我想使用正则表达式 s 将匹配任何包含至少一个非空格字符的字
  • 如何使用 ProtoGen 从 proto 文件生成结构

    我们一直在使用 protobuf net ProtoGen 从 proto 文件生成 C cs 文件 我们希望代替类来生成结构 例如 DataContract public struct Entity1 ProtoMember 1 publ
  • 我可以对(非成员)函数使用部分模板特化吗?

    我试图在 非成员 函数上使用部分模板专业化 但我在语法上遇到了问题 我在 StackOverflow 中搜索了其他部分模板专业化问题 但这些问题涉及类或成员函数模板的部分专业化 作为起点 我有 struct RGBA RGBA uint8
  • 类型别名和不完整类型

    我可能已经超出了解决这个本应简单的问题的范围 我在这里开始这个问题 在编译时获取基类的类型 https stackoverflow com questions 17735852 getting type of a base class at
  • 如何在 Visual Studio 2010 Express 中引用 system.drawing?

    我对此有点陌生 我的印象是要绘制我创建的矩形 我需要使用 system drawing graphics 问题是 我收到错误 命名空间 System 中不存在类型或命名空间名称 drawing 您是否缺少程序集引用 当我右键单击解决方案资源
  • 生成范围 [min,max] 内的随机数 [重复]

    这个问题在这里已经有答案了 我正在使用 C 生成范围 min max 内的整数随机数 我在用 int random int int min int max return min rand max min 但我认为上面的代码适用于范围 min
  • 使用 _Alignas 进行结构成员对齐

    我想知道以下问题 是新的吗 Alignas结盟 C11 中的说明符适用于结构成员吗 我一直假设这么多 但彻底阅读了 N1570 公开草案似乎表明对齐说明符不能 出现在一个说明符限定符列表 这就是我所期望的 如果得到支持的话 我已经读过几遍语
  • C# 3.0 中自动属性和公共字段的区别

    我无法理解为什么 C 3 0 中存在自动实现的属性语言功能 当你说的时候有什么区别 public string FirstName than public string FirstName get set 因为它们在生成的 IL 代码 和机
  • C#:如何处理乱序 TCP 数据包?

    请有人解释一下如何处理乱序数据包 我使用原始套接字来捕获数据包 并在数据包到来时解析它们 但其中一些数据包的顺序错误 例如 ID 标志 16390 PSH ACK 16535 PSH ACK 16638 确认 16640 PSH ACK 1

随机推荐

  • 如果页面有 session_start(),则不会加载;在里面

    我最近从多年的 WAMP 切换到 XAMPP 因为我想要 PHP 7 但我注意到一些我以前从未经历过的事情 它不会加载具有以下内容的 php 文件 session start 在他们中 我只是在 Chrome IE FF 中收到 正在等待本
  • 来自 DataProvider 的 Yii 分页变量

    我的控制器操作中需要某些分页变量 such as 1 当前页码 2 当前页偏移量 3 显示总记录数 即显示 2005 年的 31 至 40 条记录 我尝试了以下方法 dataProvider NodesTerms getNodesDataF
  • Docker 按顺序下载各层

    有没有办法让 docker 按顺序而不是并行下载图像的各层 我之所以需要这个 是因为我们的存储库对网络问题非常严格 或狡猾 我收到很多 EOF 错误 例如 time 2016 06 14T13 15 52 936846635Z level
  • Web API 中的命名空间“System.Web”中不存在类型或命名空间“Http”

    我正在尝试按照此链接创建一个 Web API 我已经完全添加了它的显示方式this https www tutorialspoint com asp net mvc asp net mvc web api htm文章 但是添加控制器后 它给
  • 根据值向网格图添加边框

    我想知道你是否能帮我解决这个问题 我有一个由 0 和 1 组成的网格 如果它是 1 我想向绘图单元格区域添加边框颜色 我使用 imshow 生成根据值着色的网格 例如 a np random randint 2 size 10 10 im
  • Yarn 迷你集群容器日志目录不包含 syslog 文件

    我已经基于 CDH 5 1 0 的 hadoop 2 3 0 设置了带有 1 个节点管理器 4 个本地目录和 4 个日志目录等的 YARN MapReduce 迷你集群 它看起来或多或少起作用 我未能实现的是从容器进行系统日志记录 我看到容
  • 为什么 wget 输出到 stderr 而不是 stdout?

    经过 30 分钟徒劳尝试捕获输出后wget 我发现该程序写入stderr而不是stdout 在网络和堆栈溢出中搜索表明这是一个众所周知的事实 知道为什么会这样吗 这是众所周知的 因为它在manual http www gnu org sof
  • PHP 组合数组

    我如何组合这两个数组 如果数组有重复项 则只有一个使用 PHP 表示 Array 0 gt 18 1 gt 20 2 gt 28 3 gt 29 Array 0 gt 1 1 gt 8 2 gt 19 3 gt 22 4 gt 25 5 g
  • 如何对不描述函数的 N 个点进行插值

    Suppose i have n points also suppose that this points have an order and not necessary this points make a function I m wo
  • JavaFX ContextMenu 加速器从错误的选项卡触发

    我有一个TabPane有两个选项卡 每个选项卡都有一个TableView它有一个上下文菜单 这两个上下文菜单有重复的加速器 但我希望只有当前选定的选项卡才会响应 但发生的只是最后添加的Tab似乎得到了该事件 即使它没有被选择 下面是完整的示
  • 从子文件夹提供 React 应用程序时出错

    我正在尝试从子文件夹提供 React 应用程序 目前它是一个非常简单的 SPA 运行在根 URL 上 例如http 我的服务器 3000 http myserver 3000 并且我想从子文件夹中提供它 例如http myserver 30
  • 在仅包含值类型的自定义结构上使用 Marshal.SizeOf() 方法

    我创建了一个由两种值类型组成的简单结构 public struct Identifier public Guid ID get set public Byte RequestType get set 然后我打电话Marshal SizeOf
  • Django 中的 URL 正则表达式,具有有限的单词集

    给定以下 django URL conf 入口 url r P
  • 查找 2D 数组/矩阵中 k 个最高值的索引

    我有一个包含值的 2D 矩阵 我想找到前 5 个值的索引 例如对于 matrix 0 17542851 0 13199346 0 01579704 0 01429822 0 01302919 0 13279703 0 12444886 0
  • 自动完成jquery和SQL,ASP.NET

    我正在尝试使用 jquery 创建一个自动完成文本框 它将绑定到 SQL 数据库 我还想在页面上放置一个下拉列表 以便根据初始选择自动完成文本框将从不同的表中检索数据 这是一个 ASP NET 2 0 页面 背后的代码是 VB NET 我有
  • Swift:可选下标的可选链接

    我有一个let map String String and a let key String 最简洁的访问方式是什么map key 并取回String 如果我有一个key and None如果我没有 let value key flatMa
  • 如何在 ASP.NET MVC 控制器中使用 Automapper 配置

    我正在使用 AutoMapper 将模型转换为视图模型 我已经完成所有设置 测试和工作 作为参考 我的配置方法如下所示 public static MapperConfiguration Configure MapperConfigurat
  • Rails:更改生产数据库的最佳方法

    我需要对正在使用的生产数据库进行更改 只需添加几列即可 我已经通过迁移对开发数据库进行了更改 在保留现有数据且不会过多干扰操作的情况下更新生产数据库的最佳方法是什么 它是 MYSQL 我还需要向列添加数据以及现有记录 一列可以有默认值 它是
  • 如何在 docker 容器内使用 nginx 提供静态文件?

    因为我运行的是 Mac OSX 所以我使用 boot2docker 我不知道如何使用在 docker 容器内运行的 nginx 也包含静态资产 如我的 html 和 js 提供静态文件 我有四个 docker 容器正在与此一起旋转docke
  • 存储库模式实现

    似乎我找到的存储库模式的每个示例 其实现都在某种程度上有所不同 下面是我主要找到的两个例子 interface IProductRepository IQueryable