使用 CQRS 和事件溯源时的唯一性验证

2024-02-18

我正在尝试使用事件源来实现我自己的 CQRS 基础设施,以更好地学习它。作为一个示例项目,我正在实现一个博客引擎,我知道它可能不是一个完美的选择,但我只想做一些真实的事情。

我现在遇到的问题是验证。每个帖子都有一个shortUrl,以及shortUrl应该是唯一的,但是我应该将此验证放在域中的哪里?我知道,在发送命令之前,我会通过从读取存储中读取命令来检查它在创建创建后命令或更新后命令时是否有效,从而进行验证。

我能想到两个“解决方案”。

  1. Have a Blog跟踪所有博客相关设置以及对所有帖子的引用的聚合。但在我看来,这个问题是我必须处理这种情况下聚合之间的通信,以及每次我需要验证一个的唯一性时shortUrl我需要从事件存储中读取所有事件来创建所有帖子,这似乎很复杂。
  2. 我的第二个选择是当事件被触发时,当我的事件处理程序注意到它有两个指向不同帖子的短网址时,创建读取模型的事件处理程序会触发重复的短网址事件。让读取模型在检测到错误时触发事件是否有效?

还有其他选择吗?请注意,我知道我的域可能不是最适合 cqrs 和 DDD,但我这样做是为了在小域中学习。


我会选择只负责生成唯一 ShortURL 的应用程序服务。您可以使用事务数据库来实现此行为。通常,此服务将由 BlogPost 聚合的命令处理部分使用。如果存在重复的 ShortURL,您可以触发 DuplicateUrlErrorEvent。 您可以通过使用相同的数据源创建一个瘦查询模型来在 UI 中预先捕获此问题(但永远不会 100%),这样您就可以在提交帖子之前查询缩短的 URL 是否唯一(如 @RyanR 的答案所述) )。

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

使用 CQRS 和事件溯源时的唯一性验证 的相关文章

随机推荐

  • C++:是否有理由在非异常情况下使用异常

    让我给你举个例子 假设你有一个可以有子窗口的窗口类 每个子窗口都保存一个指向其父窗口的弱指针 每个窗口都有一个指向其子窗口的共享指针列表 现在我遇到的情况是 如果子窗口被破坏 我不知道它被破坏是因为父窗口被关闭 还是因为子窗口本身被关闭 因
  • 如何将我的整体程序分割成更小的、单独的文件?

    在我在网上看到的所有代码中 程序总是被分成许多较小的文件 不过 对于我所有的学校项目 我只需要一个巨大的 C 源文件 其中包含我使用的所有结构和函数 我想学习如何将我的程序分割成更小的文件 这似乎是专业标准 顺便问一下 这是为什么 只是为了
  • 如何在playframework 2.0中配置FS数据库?

    这有可能吗 在框架的第一个版本中似乎很容易完成 而不是使用 Default database configuration db default driver org h2 Driver db default url jdbc h2 mem
  • Spark 序列化错误:当我将 Spark Stream 数据插入 HBase 时

    我对 Spark 如何在数据格式方面与 HBase 交互感到困惑 例如 当我在下面的代码片段中省略 ERROR 行时 它运行良好 但是添加该行后 我发现了与序列化问题相关的 任务不可序列化 的错误 如何更改代码 发生错误的原因是什么 我的代
  • 如果 LONG_MAX 为 2147483647,strtol("-2147483648", 0, 0) 是否会溢出?

    根据规格strtol 如果主题序列具有预期的形式并且base的值为0 则以第一个数字开始的字符序列应被解释为整数常量 如果主题序列具有预期的形式并且base的值在2到36之间 则应将其用作转换的base 将每个字母赋予上面给出的值 如果主题
  • 识别iPhone中两个字符串之间的字符串[重复]

    这个问题已经存在了 可能的重复 根据条件从 iPhone 中的字符串中检索子字符串 https stackoverflow com questions 11100379 retrieving the substring based on c
  • Magento - 报价和订单之间的区别

    我对付款方式中如何调用报价和订单有疑问 据我所知 报价是提供的一组产品或服务 在 magento 中 报价数据是在单击 Onepage Checkout 的 下订单 按钮之前创建的 下订单后 订单数据将在 Magento 中创建 如果订单得
  • SLURM 对可执行文件进行多个并行调用

    我有一个可执行文件 需要多个选项和多个文件输入才能运行 可以使用可变数量的核心来调用可执行文件来运行 例如 可执行文件 a b c file fileA file fileB file fileZ cores X 我正在尝试创建一个 sba
  • 从一个文件中减去另一个文件中的行

    我找不到真正从一个文件中减去另一个文件的答案 我的目标是删除一个文件中出现在另一个文件中的行 应考虑多次出现 这意味着 例如 如果一行在文件 A 中出现 4 次 而在文件 B 中仅出现一次 则文件 C 应该包含其中的 3 行 File A
  • 具有相同菜单、相同布局的片段会导致重复的 menuitem

    我有一个包含 2 个片段的布局 这些片段使用相同的菜单 因为我有另一个布局 其中只有其中一个 在小屏幕设备中使用 我的问题是每个片段的菜单项显示在菜单中 并且由于它们来自同一菜单 因此它们彼此重复 我需要仅显示一个片段的菜单 而不是两者 无
  • 为“SFSpeechRecognizer”实现“用户停止说话”通知

    我正在尝试解决这个问题 SFSpeechRecognizer 检测话语结束 https stackoverflow com questions 42530634 sfspeechrecognizer detect end of uttera
  • Web 应用程序中的 ORM 是什么?

    我最近收到一家服务器公司的回复 询问我们是否在应用程序中使用 ORM 来完成筛选应用程序端的所有工作 如 Rails 或者我们是否编写大量 SQL 嵌入式函数等 这将使数据库服务器完成所有工作为您处理 谁能解释一下这是什么意思 我们的 We
  • 负载测试 ZeroMQ (ZMQ_STREAM) 以查找它可以处理的最大并发用户数

    有没有人有任何实际场景对 ZMQ 套接字进行负载测试以获得最大数量 他们可以处理的 并发用户 不是吞吐量 看起来 ZeroMQ 在 FD 限制方面存在一些严重问题 场景是 有许多 Web 服务器框架吹嘘它们可以处理数百万个并发用户 现在 如
  • React-Native:在项目或这些目录中找不到 React

    我们已经将 React Native 项目升级到最新的 React Native 版本 v0 61 2 和 React 16 9 0 并且它在 Android 上运行得很好 当我们尝试在 iosthought 上运行它时 我们收到消息 wa
  • UnsupportedOperation: fileno - 如何修复此 Python 依赖项混乱?

    我正在构建一个相当广泛的 Python 后端 并且在服务器 A 上运行得很好 然后 我在新的 开发 服务器 B 上安装了该系统 在该服务器上我只是从头开始再次安装了所有 pip 包 事情似乎进展顺利 所以我做了一个pip freeze 然后
  • 一台虚拟主机多个域 |通配符主机(共享主机)?

    我有以下任务 创建一个可通过 20 个不同域名访问的网站 相同的文件 相同的文件夹 相同的IP 问题 共享主机 这可以通过一个裸cname指向同一个公共子域来完成吗 或者我们是否需要一个静态IP 问题肯定是共享托管 我试图避免一一手动创建
  • 以编程方式在 Linux 上查找可用的声卡

    有没有办法使用 asoundlib 和 C 以编程方式获取系统上可用声卡的列表 我想要它具有相同的信息 proc asound cards 您可以使用迭代卡片snd card next 从值 1开始获得第0张牌 这是示例代码 编译它gcc
  • 无法启动 Android 虚拟 AVD 设备

    我已经成功安装了Android SDK 并将SDK Manager链接到了SDK路径 然后我创建了API 8的AVD就完成了 但是 当我要启动虚拟设备时 它没有启动 并给出了类似的错误 foo can not started commend
  • 使用 p:calendar 在 jsf h:datatable 中进行跨字段验证

    我注意到有人问了这个问题 但尚未正确回答 我有一个有两列的数据表开始日期 and end date 两者都包含 primefaces p calendar 控件 我需要确保对于每一行 第 1 列中的日期不晚于第 2 列中的日期 我想将其绑定
  • 使用 CQRS 和事件溯源时的唯一性验证

    我正在尝试使用事件源来实现我自己的 CQRS 基础设施 以更好地学习它 作为一个示例项目 我正在实现一个博客引擎 我知道它可能不是一个完美的选择 但我只想做一些真实的事情 我现在遇到的问题是验证 每个帖子都有一个shortUrl 以及sho