使用 Raven DB 的数据访问架构

2024-02-14

我可以将哪些数据访问架构与 Raven DB 结合使用?

基本上,我想通过接口分离持久性,因此我不会将底层存储暴露给上层。 IE。我不想让别人看到我的域名文档存储库 or 文档会话它们来自 Raven DB。

我已经实现了通用存储库模式,这似乎有效。但是,我不确定这实际上是正确的方法。也许我应该采取命令查询隔离或其他方式?

你怎么看?


就我个人而言,我对命令模式并没有真正的经验。我看到它被用在Rob Ashton 的精彩教程 http://codeofrob.com/archive/2010/09/28/ravendb-image-gallery-project-i.aspx.

对于我自己来说,我将尝试使用以下方法:-

  • 存储库模式(正如您所做的那样)
  • 使用 StructureMap 进行依赖注入
  • 模拟测试起订量
  • 用于隔离业务逻辑的服务层(不确定这里的模式..或者即使这是一种模式。

因此,当我希望从 RavenDB(持久性源)获取任何数据时,我将使用服务,然后服务将调用适当的存储库。这样,我不会将存储库暴露给应用程序,存储库也不会非常重或复杂 -> 它基本上是 FindAll / Save / Delete。

eg.

public SomeController(IUserService userService, ILoggingService loggingService)
{
    UserService = userService;
    LoggingService = loggingService;
}

public ActionMethod Index()
{
   // Find all active users, page 1 and 15 records.
    var users = UserService.FindWithIsActive(1, 15);         
    return View(new IndexViewModel(users));
}

public class UserService : IUserService
{
    public UserService(IGenericReposistory<User> userRepository, 
                       ILoggingService loggingService)
    {
        Repository = userRepository;
        LoggingService = loggingService;
    }

    public IEnumberable<User> FindWithIsActive(int page, int count)
    {
        // Note: Repository.Find() returns an IQueryable<User> in this case.
        //       Think of it as a SELECT * FROM User table, if it was an RDMBS.
        return Repository.Find() 
            .WithIsActive()
            .Skip(page)
            .Take(count)
            .ToList();
    }
}

所以这是一个非常简单且人为的示例,没有错误/验证检查、try/catch 等.....并且它是伪代码..但您可以看到服务是如何的rich而存储库是(应该是,至少对我来说)simple or lighter。然后我只通过服务公开任何数据。

这就是我现在所做的.NET and Entity Framework我实际上距离尝试这个还有几个小时RavenDb (WOOT!)

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

使用 Raven DB 的数据访问架构 的相关文章

  • C# 创建函数队列

    我写了一个名为 QueueManager 的类 class QueueManager Queue functionsQueue public bool IsEmpty get if functionsQueue Count 0 return
  • 起订量要求?违背了目的?

    是否需要虚拟化您想要模拟的所有属性访问器就违背了模拟的目的 我的意思是 如果我必须修改我的对象并虚拟化我想要模拟的每个访问器 我难道不能继承我的类并自己模拟它吗 你的问题非常有效 但如果你仔细想想 没有其他方法可以模拟课程 如果你采用一个接
  • 为什么 VB.NET 和 C# 中针对值检查 null 存在差异?

    In VB NET http en wikipedia org wiki Visual Basic NET有时候是这样的 Dim x As System Nullable Of Decimal Nothing Dim y As System
  • 用户控件内所有控件均为空

    我有一个 UserControl 它使用 UserControl 以及其他控件 In the ascx文件我有以下代码
  • 为什么这个函数指针赋值在直接赋值时有效,但在使用条件运算符时无效?

    本示例未使用 include 在 MacOS10 14 Eclipse IDE 上编译 使用 g 选项 O0 g3 Wall c fmessage length 0 假设这个变量声明 int fun int 这无法通过 std touppe
  • 访问“if”语句之外的变量

    我怎样才能使insuranceCost以外可用if陈述 if this comboBox5 Text Third Party Fire and Theft double insuranceCost 1 在 if 语句之外定义它 double
  • 矩阵向量变换

    我正在编写一个代码来制作软件蒙皮器 骨骼 皮肤动画 并且我正处于 优化 阶段 蒙皮器工作得很好 并且在 Core 上 1 09 毫秒内对 4900 个三角形网格与 22 个骨骼进行蒙皮Duo 2 Ghz 笔记本 我需要知道的是 1 有人可以
  • 存储过程上的 OdbcCommand - 输出参数上出现“未提供参数”错误

    我正在尝试执行存储过程 通过 ODBC 驱动程序针对 SQL Server 2005 但收到以下错误 过程或函数 GetNodeID 需要参数 ID 但未提供该参数 ID 是我的过程的 OUTPUT 参数 在存储过程中指定了一个输入 mac
  • 我可以仅在少数情况下关闭模拟吗

    我有一个始终使用模拟的应用程序 但是 当用户以管理员身份登录时 一些操作需要他们写入服务器本身 现在 如果这些用户在实际服务器上没有权限 有些用户没有 则不会让他们写入 我想做的是关闭几个命令的模拟 有没有办法做这样的事情 using Ho
  • 手动将 ClientBase 集合类型从 Array[] 更改为 List<>

    我将自己的 WCF 代理与 Client Base 一起使用 我想做一些类似于 svc util 中的 ct 属性的操作 并告诉代理返回 List 集合类型 我不能使用 List 因为实体由 nhibernate 管理 所以我必须使用 IL
  • 格式化货币

    在下面的示例中 逗号是小数点分隔符 我有这个 125456 89 我想要这个 125 456 89 其他示例 23456789 89 gt 23 456 789 89 Thanks 看看这个例子 double value 12345 678
  • C#中Enum中定义的value__是什么

    What value 可能在这里 value MSN ICQ YahooChat GoogleTalk 我运行的代码很简单 namespace EnumReflection enum Messengers MSN ICQ YahooChat
  • dropdownlist DataTextField 由属性组成?

    有没有一种方法可以通过 C 使 asp net 中的下拉列表的 datatextfield 属性由对象的多个属性组成 public class MyObject public int Id get set public string Nam
  • 使用 AdHocWorkspace 会导致“不支持语言‘C#’”。

    在VS2015中使用Microsoft CodeAnalysis CSharp Workspaces的RC2 这段代码会抛出异常 var tree CSharpSyntaxTree ParseText var workspace new A
  • 允许使用什么类型的内容作为 C 预处理器宏的参数?

    老实说 我很了解 C 编程语言的语法 但对 C 预处理器的语法几乎一无所知 尽管我有时在编程实践中使用它 所以问题来了 假设我们有一个简单的宏 它扩展为空 define macro param 可以放入宏调用构造中的语法有哪些限制 调用宏时
  • “if”在 ASP.NET MVC View (.aspx) 文件中被认为有害?

    我记得看到一个博客 或其他内容 说你不应该在 ASP NET MVC 的 aspx 文件中使用 但我不记得它说的替代方案是什么 有人记得看过这个并指出我吗 基本上 这意味着您的视图中不应该有大量的 if 语句 您的控制器和视图模型应该能够处
  • 将非算术类型作为参数传递给 cmath 函数是否有效?

    给定以下用户定义类型S具有转换功能double struct S operator double return 1 0 以及以下调用cmath http en cppreference com w cpp header cmath使用类型的
  • 如何获取 QIcon 的文件/资源​​路径

    假设我做了这样的事情 QIcon myIcon resources icon ico 我稍后如何确定该图标的路径 例如 QString path myIcon getPath 问题是 没有getPath 会员 我找不到类似的东西 但肯定有办
  • c# 模拟 IFormFile CopyToAsync() 方法

    我正在对一个异步函数进行单元测试 该函数将 IFormFile 列表转换为我自己的任意数据库文件类列表 将文件数据转换为字节数组的方法是 internal async Task
  • 无法使 Polly 超时策略覆盖 HttpClient 默认超时

    我正在使用 Polly 重试策略 并且正如预期的那样 在重试过程中HttpClient达到 100 秒超时 我尝试了几种不同的方法来合并 Polly 超时策略 将超时移至每次重试而不是总计 但 100 秒超时仍然会触发 我读过大约 5 个

随机推荐

  • Google Maps API v3 向每个标记添加信息窗口

    注意 我使用的是 Google Maps API v3 我正在尝试为我在地图上放置的每个标记添加一个信息窗口 目前我正在使用以下代码执行此操作 for var i in tracks racer id data points values
  • 从 SJSIR “手动”构建 JS

    我需要在运行时从 sjsir 文件构建一个 js 文件来实现插件系统 这样就无法在编译时与我的其余编译一起完成 我曾经在 0 6 3 中使用以下代码实现相同的过程 但它似乎已被弃用 您建议使用什么算法来实现与 0 6 13 相同的操作 谢谢
  • 更改博客主题(blogdown+netlify)

    我按照 Yihui 的教程并使用创建了一个网站blowdown github and netlify 现在 我想更改我的网站的主题 问题是我有几篇文章产生了很多情节 因此 当我在本地创建一个新网站并添加我的帖子时 git push失败 我怀
  • Xcode 12 Beta - 找不到模拟器运行时

    我已经安装了 Xcode 12 beta 2 我尝试通过 Mac OS Catalina 上的 Jenkins 运行我们的 xamarin 项目 它失败并出现以下错误 当我从 Mac Visual studio 构建相同的项目时 它成功了
  • 有没有办法在网页开发中使用加色混合?

    我有一个可以使用的网页设计加法混色 http en wikipedia org wiki Additive color 想要的效果是 红色方块覆盖绿色方块 重叠区域呈现黄色 有没有什么好方法可以使用标准工具 CSS CSS 透明度 不透明度
  • 内联块+最小/最大宽度行为

    我在许多浏览器 FF Opera Ie 中看到我给它们的元素 内联块 和 最小 最大宽度 它们的宽度自动设置为 最小宽度 而不是最大宽度 如预期的那样 这是正常行为吗 我可以用CSS方式解决它 具有最大宽度的内联块元素 吗 我了解 floa
  • 快速输入输出功能

    define getcx getchar unlocked inline void inp int n fast input function n 0 int ch getcx int sign 1 while ch lt 0 ch gt
  • 为什么 tkinter 的 after() 函数会冻结我的窗口?

    我正在使用创建 dodger 的副本tkinter 我面临着计时对象移动的问题 有人告诉我时间模块不能很好地工作tkinter 因此我应该使用after 反而 但是 我面临着同样的问题after 功能就像我对时间模块所做的那样 这是我的代码
  • 特定git命令的颜色输出

    我正在编写一个运行 git 命令并捕获输出的工具 并且我希望将输出着色 Git 注意到该工具不是终端 因此color ui需要设置为always 我真的不想在全局 存储库配置文件中设置它 因为它会与使用 git 的其他程序混淆 这git b
  • 循环访问 Azure 管道中的变量

    我有一个文本文件 其中有两个名称client1 and client2 我有一个 Powershell 脚本来读取文本文件 我对它的理解是它已经创建了一个数组 clientvariable Get Content Path FilePath
  • 计划错误:尚未使用 Cloud Resource Manager API

    当我尝试跑步时 steps id Plan Terraform name hashicorp terraform light args plan 在 Cloud Build 中 我收到错误 Error Error reading Proje
  • 垃圾收集器对java中的静态变量或方法起作用吗?

    我正在创建一个示例演示程序 以便让我了解如何使用垃圾收集器在 java 中释放静态变量 方法的引用 我使用弱引用是为了不阻止垃圾收集器 Class Sample public class Sample private static Stri
  • 如何激活 Autodesk Forge Snapper?

    我正在尝试激活自查看器版本 7 3 以来实施的新 Snapper 扩展 所以我像这样加载扩展 viewer loadExtension Autodesk Snapping 似乎有效 之后 我尝试访问类似的描述方法 但总是收到此错误 getS
  • PopupWindow 上的视图可以显示 PopupMenu 吗?

    在 Android API11 中 我在 PopupWindow 内显示一个按钮 我想在单击按钮时显示 PopupMenu 而不关闭 PopupWindow 这有可能吗 我正在实例化并初始化 PopupMenu 但是当我调用 popupMe
  • Javascript ES6 - 在不同的 .js 文件中导入函数或变量之前等待模块完成执行

    我是 ES6 和导入 导出模块的新手 我对如何实现我想要的东西感到困惑 我有一个 js 文件用于初始化 SDK 并且必须等待 dom 内容首先加载 我还有其他较小的 js 文件 我想在其中编写从第一个文件引用 导入应用程序对象的方法 但是
  • 如何解决 MalformedResponse 必须设置“final_response”。动作模拟器出错

    您好 当我尝试测试我的测试应用程序时 它会停止并显示 My test app isn t responding right now Try again soon When I check validation error tab I not
  • 生产就绪的多线程 C# http 服务器

    我在 c NET 中实现了一个 HTTP 服务器 public class HttpServer private HttpListener listener public HttpServer listener new HttpListen
  • SQLSTATE[08001]:[Microsoft][ODBC Driver 13 for SQL Server]TCP 提供程序:无法建立连接,因为目标计算机主动拒绝它

    我的学说存储库代码不起作用 而我am能够正常访问数据库 读取表数据 我得到这个堆栈跟踪 EntityManager gt getRepository AppBundle Person in src AppBundle Controller
  • Ember 中的详细日志记录

    我现在正试图把注意力集中在 Ember 身上 但所有的魔力都让这一切变得困难 我已经设置了LOG TRANSITIONS true and Ember LOG BINDINGS true 这为我提供了一些最少的控制台日志记录 但我确实需要更
  • 使用 Raven DB 的数据访问架构

    我可以将哪些数据访问架构与 Raven DB 结合使用 基本上 我想通过接口分离持久性 因此我不会将底层存储暴露给上层 IE 我不想让别人看到我的域名文档存储库 or 文档会话它们来自 Raven DB 我已经实现了通用存储库模式 这似乎有