存储库模式与 DAL

2023-12-21

它们是一样的吗?刚刚看完罗布·康纳利的店面教程 https://www.asp.net/mvc/videos/mvc-1/aspnet-mvc-storefront/aspnet-mvc-storefront-part-1-architectural-discussion-and-overview它们似乎是相似的技术。我的意思是,当我实现 DAL 对象时,我有 GetStuff、Add/Delete 等方法,并且我总是先编写接口,以便稍后可以切换数据库。

我是否混淆了事情?


你绝对不是那个混淆视听的人。 :-)

我认为这个问题的答案取决于你想成为一个多么纯粹的人。

如果您想要严格的 DDD 观点,那将带您走一条路。如果您将存储库视为一种模式,它帮助我们标准化了分隔服务和数据库的层的接口,那么它将让您失望。

从我的角度来看,存储库只是一个明确指定的数据访问层。或者换句话说,是实现数据访问层的标准化方法。不同的存储库实现之间存在一些差异,但概念是相同的。

有些人会对存储库施加更多的 DDD 约束,而另一些人则将存储库用作数据库和服务层之间的便捷中介。像 DAL 这样的存储库将服务层与数据访问细节隔离开来。

一个似乎使它们不同的实现问题是,存储库通常是使用采用规范的方法创建的。存储库将返回满足该规范的数据。我见过的大多数传统 DAL 都会有一组更大的方法,其中该方法将采用任意数量的参数。虽然这听起来似乎是一个很小的差异,但当您进入 Linq 和 Expressions 领域时,这是一个大问题。 我们的默认存储库界面如下所示:

public interface IRepository : IDisposable
{
    T[] GetAll<T>();
    T[] GetAll<T>(Expression<Func<T, bool>> filter);
    T GetSingle<T>(Expression<Func<T, bool>> filter);
    T GetSingle<T>(Expression<Func<T, bool>> filter, List<Expression<Func<T, object>>> subSelectors);
    void Delete<T>(T entity);
    void Add<T>(T entity);
    int SaveChanges();
    DbTransaction BeginTransaction();
}

这是 DAL 还是存储库?在这种情况下,我猜两者都是。

Kim

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

存储库模式与 DAL 的相关文章

  • ASP.NET MVC:文件响应流?

    当我从 MVC 操作方法返回 FilePathResult 时 会发生以下哪种情况 假设结果指向的文件非常大 文件被完整地加载到服务器的内存中 然后发送到客户端 该文件以某种方式传输到客户端 其方式在任何时候都不会完全加载到服务器的内存中
  • asp.net MVC - 如何通过不同的存储库类共享 SqlConnection 的同一实例

    我正在使用 MVC5 和普通 ADO NET 创建一个新项目 只是作为学习练习 我需要创建一个存储库 用于注册一个模型 其中包含几个也需要同时创建的相关对象以及这些对象反过来可能需要插入其他对象 我能想到的最简单的解决方案是拥有一个庞大的方
  • MVC 4 文本框未在回发时更新

    我有一个使用 modelview 对象的表单 该对象在提交表单的回发时不会更新文本框值 提交表单时 我编辑绑定到文本框的对象的属性 当表单返回时 对象属性仍然更改 但文本框值不会更改 这就像文本框值被缓存并且不会改变 我该如何解决 文本框默
  • MVC WebGrid 设置渲染的ID

    使用 MVC 3 中的 WebGrid 如何在呈现时指定控件的名称 即呈现时表的 id var someGrid new WebGrid source Model Users defaultSort Name rowsPerPage 50
  • 如何获取类库项目中的连接字符串

    在我的 net 解决方案中 我有两个不同的项目 一个 MVC 核心 Web 应用程序项目和一个类库项目 在Web应用程序项目中 数据库连接字符串位于appsettings json文件 我想从类库项目访问该连接字符串 是否可以 如果是 怎么
  • FluentValidation:验证类型名称必须是唯一的

    我的代码中指定了以下规则 RuleFor x gt x Auction Round1Ring1Start GreaterThan DateTime Now RuleFor x gt x Auction Round1Ring1End Grea
  • 在实体框架中不使用 Dispose 或 using()

    我一路上正在编写一个网络应用程序并学习实体框架 如果我做错了什么 我很好奇 我在查询时没有使用过 dispose 或 using 语句 我的存储库示例 public User GetUserById int sessionId var us
  • 如何在 web.config 中设置默认的 text/html 内容类型?

    我想将 ASP NET MVC 应用程序中网页的默认内容类型设置为 text html 我知道这可以通过向我的所有 元素添加 ContentType text html 来完成 但我更喜欢使用 web config 我怎样才能做到这一点 T
  • 如何读取扩展文件属性/文件元数据

    因此 我按照教程使用 ASP net core 将文件 上传 到本地路径 这是代码 public IActionResult About IList
  • 从控制器返回 html 字符串并显示在视图中

    如何返回包含字符串属性的模型 li 元素并在视图中显示它 如果我只写 Model Messages 它会显示所有字符串 我需要 html 格式 您可以使用Content带有 Content Type 的方法text html直接返回HTML
  • 从业务逻辑类重定向 asp.net mvc 页面

    我在业务逻辑层中调用一个静态方法 出于我在这里不会提及的目的 该方法需要自行进行重定向 而不是将信息返回到控制器以进行重定向 我认为我需要使用 HttpContext 对象 但正在努力创建路由 我不能简单地执行 context Respon
  • 为什么在 VS2008/Casini 中启动调试时 Application_Init 会触发两次?

    为什么在 VS2008 Casini 中启动调试时 Application Init 会触发两次 是的 它发生在 global asax 中 虽然看起来相当随机 但只偶尔发生一次 我假设您引用的是 ASP NET MVC 应用程序中的 Gl
  • 为什么有多个 DbContext 类?

    当我使用 LINQ 和 dbml 文件进行编程时 只有一个上下文 但是 当我创建一个 MVC 站点时 似乎每个实体都有单独的上下文 这是 MVC 教程向我展示的方式 使用 电影 上下文 I have public class Account
  • 创建视图中可用的自定义助手

    我有太多文本实用方法 例如MakeShortText string text int length RemoveTags string text TimeAgo DateTime date 和别的 我想从单独的助手访问它们 如下一个示例所示
  • 在 MVC 中提交后保留密码文本框值

    我正在 MVC 应用程序中工作 在我们的应用程序中 我们有一个获取用户详细信息 客户详细信息 的表单 例如 温和 名字 姓氏 密码等 提交后 在控制器本身中 我们验证输入的 MailID 是否已被注册 如果已经注册意味着 返回带有错误消息的
  • MVC 4 - 在局部视图中使用不同的模型

    请忍受我的noobness 我对 MVC 模式非常陌生 我正在尝试做什么 我正在为我的网站上的注册用户构建个人资料信息页面 该页面将列出有关用户的数据 例如出生日期 电话号码 订阅状态等 您明白了 我还想要一个表格让用户更改密码 电子邮件地
  • Razor ViewEngine HTML.Checkbox 方法创建隐藏输入。为什么? [复制]

    这个问题在这里已经有答案了 我在我的视图页面上编写了以下代码 Html CheckBox ChxName true 我得到了以下结果
  • asp.net mvc 未收到包含句点的 GET 请求

    我将 net4 5rc 与 MVC4 0rc 一起使用 下面的代码取自 MVC webapi 应用程序 但我对于常规 asp net mvc 也有相同的行为 我的注册路由代码如下所示 routes IgnoreRoute resource
  • ASP.NET MVC3 Ajax.ActionLink - 条件确认对话框

    我有一个 Ajax ActionLink 仅当满足某些条件 用户有未保存的更改 时 我才希望显示一个确认对话框 我创建了一个 JavaScript 函数 它根据需要显示确认对话框 并根据响应返回 true 或 false 我将其绑定到 Ac
  • 如何启用 jqGrid 的 Excel 导出按钮

    你好 我想在 jqgrid 的寻呼机中显示 导出到 Excel 按钮 我尝试了很多方法 阅读了很多文章 帖子 但我没有看到这个按钮 文档也没有任何有用的东西 我应该执行哪些操作才能看到此按钮 诗 我使用 ASP NET MVC PSS 我的

随机推荐

  • Haskell 中如何实现列表推导式?

    列表推导式只是一种语言功能吗 使用纯 Haskell 伪造列表理解的最简单方法是什么 你必须使用 do 块 gt gt 来做到这一点或者你可以使用其他一些 将列表理解结合在一起的方法 澄清 伪造 列表理解是指创建一个接受相同输入并产生相同输
  • 服务器日志在 POST 请求之前显示 GET 请求

    当我查看服务器日志时 我看到定期 GET 请求在来自同一 IP 具有相同引荐来源网址的 POST 请求之前立即传入 我期望的是 POST 但不是 GET 有没有人见过这个 我正在使用 javascript 在 iframe 内动态创建一个表
  • ConvertTo-Csv 输出不带引号

    我在用ConvertTo Csv获取逗号分隔的输出 get process convertto csv NoTypeInformation Delimiter 它的输出如下 NounName Name Handles VM WS 但是我想获
  • 通过赋值启动子 shell 并等待

    如何通过分配变量来启动一些子shell并等待所有完成 bin bash some code about FILE 1 cat FILE while read r HOST n HOST do echo HOST URL http HOST
  • setInterval延迟不准确

    我目前正在使用 setInterval 创建倒计时 尽管目前它的运行速度比应有的慢 根据MDN https developer mozilla org en docs Web API window setInterval 延迟参数以毫秒为单
  • 无法使用 smack 连接 XMPP 服务器:实施基于 GCM XMPP 的应用程序服务器时出现 EOF 异常

    java io EOFException no more data available expected end tag to close start tag
  • 从图像中删除白色背景并使其透明

    我们正在尝试在 Mathematica 中执行以下操作 RMagick 从图像中删除白色背景并使其透明 https stackoverflow com questions 7738437 但对于实际照片来说 它最终看起来很糟糕 就像图像周围
  • 字典迭代——对于 dict 与 dict.items()

    当我们迭代下面的字典时 每次迭代都会 正确地 返回一个键值对 for key value in dict items print s key has the value s key value some key 键有值 some value
  • SDL 中的 Blit 是什么?

    在 SDL wiki 中它说 使用此函数可以执行从源表面到目标表面的快速 blit 但这对我没有多大帮助 在这种情况下 术语 表面位块传输 是什么意思 基本上 这意味着将图像从一个表面复制到另一个表面 可能会被裁剪和移动
  • 二分查找和使用前缀树哪个查找更快?

    假设我有一个字符串列表和这些字符串的前缀树 并且我想在给定键的情况下定位一个字符串 哪个更快 二分查找还是前缀树查找 为什么以及时间复杂度是多少 Thanks 这两种技术都有其优点和缺点 后缀树 Advantages O N 构建复杂度 O
  • mac 上 python 子进程中的 pdflatex

    我正在尝试在 Python 2 4 4 的 tex 文件上运行 pdflatex 子进程 在 Mac 上 import subprocess subprocess Popen pdflatex fullpathtotexfile shell
  • Go 指针、引用、解除引用的规则:

    我是 GoLang 的新手 来自 Delphi C 世界 不可否认 我对这种语言感到非常兴奋 我认为它注定会成为 下一件大事 我试图了解 Go 解析器和编译器如何处理指针和引用 似乎找不到任何制定明确规则的地方 例如 在下面的代码示例中 返
  • 默认值 Specflow 步骤定义

    我刚开始接触 SpecFlow 的世界 并且遇到了第一个问题 在保持代码干燥方面 我想执行以下操作 有两种情况 Given I am on a product page And myfield equals todays date Then
  • 旋转 - 使用 LINQ C# 转置 List>

    我有一个List
  • LINQ查询任何属性包含字符串[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何查询类型 T 的集合 以返回 T 的所有项目 其中 T 的任何属性包含某个字符串 EDIT 假设我在检查是否包含之前将每个属性转换为字
  • 在 iPad 上捕获 DOM/HTML/BODY 上的 Click 事件

    我使用 jQuery 来检测 DOM 上的点击 或者让我们检测每次点击 document click function alert Click 除了 iPad iPhone 版 Safari 之外 该功能在所有浏览器中都表现良好 我还尝试在
  • 阅读 R 的电子邮件附件

    我正在使用 R 读取 Outlook 附件 我的参考资料在这里 使用 R 从 Outlook 电子邮件下载附件 https stackoverflow com questions 45577698 download attachment f
  • 以编程方式更改 WPF 中的按钮图标

    我目前有一个按钮 上面有一个图标 图像 我已经在 XAML 中配置了按钮和图像
  • 为什么静态构造函数没有任何参数?

    根据 MSDN 静态构造函数不采用访问修饰符或具有参数 在创建第一个实例或引用任何静态成员之前 会自动调用静态构造函数来初始化类 静态构造函数不能直接调用 谁能解释一下为什么静态构造函数不能有参数 正如 MSDN 所说 在创建第一个实例之前
  • 存储库模式与 DAL

    它们是一样的吗 刚刚看完罗布 康纳利的店面教程 https www asp net mvc videos mvc 1 aspnet mvc storefront aspnet mvc storefront part 1 architectu