CQRS 对于我的域是否正确?

2024-04-11

我正在对一个档案进行建模,它是视频点播系统的一部分。将存档想象成 Windows 资源管理器,其中多个用户可以创建文件夹、上传视频、重组文件夹等。有业务规则(权限)确定是否允许用户执行任务(即重命名文件夹、移动文件夹、查看文件夹等) )。

我已将每个文件夹建模为聚合根,并将一个文件夹移动到另一个文件夹似乎会影响两个聚合根。

据我了解,我应该发送一个事件来修改其他聚合。然而,我担心的是,如果第二个文件夹也被修改(比如从系统中删除或删除),那么我需要发送一个补偿命令来撤消第一个聚合更改。

我更喜欢某种交易来一起处理移动(两个聚合上的更改),如果它失败,那么至少我不需要撤消移动的第一部分或引发事件的第一部分。

这让我想到,CQRS 适合我想要解决的问题吗?如果是这样,我的聚合是否可能是错误的?


在 DDD 中,聚合应该代表事务边界。需要涉及多个聚合的事务通常表明应该改进模型,或者应该审查事务要求,或者两者兼而有之。

这是一个纯粹的 DDD 问题,独立于 CQRS 或任何其他架构模式。

另一方面,您真的需要重新发明分层结构(例如包含文件的文件夹)吗?据我所知,这个问题已经解决了相当长一段时间了。也许再次正式化该特定领域并没有固有的优势。

使用 DDD 模式进行领域建模在有界上下文中最有意义,其中 (1) 领域非常复杂,(2) 领域建模将为您的软件提供相对于类似应用程序的真正(例如竞争)优势。如果特定的有界上下文相当简单和/或重构它并没有带来真正的巨大优势,那么您最好使用最简单的解决方案。

恕我直言,这代表了领域驱动设计中最重要的概念,即聚焦核心领域

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

CQRS 对于我的域是否正确? 的相关文章

  • DDD:我真的需要加载聚合中的所有对象吗? (性能问题)

    在 DDD 中 存储库加载整个聚合 我们要么加载全部 要么不加载 这也意味着应该避免延迟加载 我关心的是性能方面的问题 如果这导致将数千个对象加载到内存中怎么办 例如 聚合Customer一万回来Orders 在这种情况下 是否意味着我需要
  • 领域驱动设计和安全

    这与此相关question https stackoverflow com questions 3006808 security implementation in domain driven design这似乎是不久前问过的 项目中的安全
  • BL 服务:异常还是方法结果?

    最好的方法是什么 为什么 V1 try var service IoC Resolve
  • 通过 MediatR PipelineBehavior 进行单元测试验证

    我正在使用 FluentValidation 和 MediatR PipelineBehavior 来验证 CQRS 请求 我应该如何在单元测试中测试这种行为 Use the 测试扩展 https docs fluentvalidation
  • Javascript 域模型对象约定

    如果我必须在 C 中创建域模型对象 我可能会这样做 public class Person Public string Name get set Public string Gender get set Public int Age get
  • CQRS 对于我的域是否正确?

    我正在对一个档案进行建模 它是视频点播系统的一部分 将存档想象成 Windows 资源管理器 其中多个用户可以创建文件夹 上传视频 重组文件夹等 有业务规则 权限 确定是否允许用户执行任务 即重命名文件夹 移动文件夹 查看文件夹等 我已将每
  • 实现领域驱动设计的函数式方法

    我在使用 C 编写领域驱动应用程序方面拥有丰富的经验 我编写的应用程序越多 我就越发现我想要采用一种不太适合标准 C OO 技术的方法 我想编写尽可能多的纯函数 因为它们真的很容易测试 我想以更具声明性的方式编写我的业务逻辑 所以我一直在研
  • 实体框架:获取存储库中的子类对象

    我有与下面列出的数据库表对应的以下模型 经理就是雇员 会计师也是雇员 让所有管理器都进入存储库的最佳方法是什么 如何实现GetAllManagers 方法 这是正确的TPT吗 CODE MyRepository MyEmployeeRepo
  • 为什么实体框架需要 ICollection 来延迟加载?

    我想编写一个丰富的域类 例如 public class Product public IEnumerable
  • 多态性:ORM 实体是领域实体还是数据实体?

    我有一个 BankAccount 表 LINQ to SQL 生成一个名为 BankAccount 的类 如下所示 global System Data Linq Mapping TableAttribute Name dbo BankAc
  • 领域驱动设计:处理原子操作和事务

    必须保证每个聚合内部的一致性 在存储库中执行此操作很容易 因为我始终可以使用数据库或框架中的事务 我对存储库之外发生的事情表示怀疑 一项服务可能需要使用多个聚合来处理请求 在服务处理过程中或在保留聚合时可能会出现问题 如果服务处理过程中出现
  • CQRS - 读取端的事件重播

    我读过几篇关于 CQRS 的博客 它们都解释说 在写入端 事件会持久保存在事件存储中 并且根据请求 事件将被检索并聚合重播 我的问题是为什么读取端不需要聚合事件重播 因为您的读取端不使用聚合 读取端实现为投影 它根据聚合发出的事件流计算当前
  • 如何在 CQRS 中处理基于集合的一致性验证?

    我有一个相当简单的域模型 涉及一系列Facility聚合根 鉴于我使用 CQRS 和事件总线来处理从域引发的事件 您如何处理集合的验证 例如 假设我有以下需求 Facility必须有一个唯一的名称 由于我在查询端使用最终一致的数据库 因此在
  • 缺失的事件如何重播?

    我正在尝试了解有关 CQRS 和事件溯源 事件存储 的更多信息 我的理解是 在这种情况下通常不使用消息队列 总线 消息总线可用于促进微服务之间的通信 但它通常不专门用于 CQRS 然而 我目前的看法是 消息总线将非常有用 可以保证读取模型最
  • 领域驱动设计 (Linq to SQL) - 如何删除聚合的某些部分?

    我似乎对整个 DDD LinqToSql 业务感到有点困惑 我正在使用 POCOS 和 linq to sql 构建一个系统 并且我有聚合根的存储库 因此 例如 如果您有 Order gt OrderLine 类 那么您就有了 Order
  • 将 F# 类型保存到数据库

    A lot http gorodinski com blog 2013 02 17 domain driven design with fsharp and eventstore f 文章数推荐 http fsharpforfunandpr
  • 使用 CQRS 处理中介管道中的错误/异常?

    我正在努力追随这个帖子 https lostechies com jimmybogard 2014 09 09 tackling cross cutting concerns with a mediator pipeline 由 Jimmy
  • 偶尔连接的 CQRS 系统 - 客户端和服务器命令 - 基于任务的屏幕

    Premise 建议在CQRS DDD ES样式应用程序使用task基于屏幕 这些屏幕引导用户并捕获意图 These task屏幕也可以称为感应式用户界面 UI 设计指南的一些示例可以帮助您创建现代的 用户友好的应用程序 Microsoft
  • DDD 哪个是根聚合根?

    许多诸如订单和订单行之类的示例都是有意义的 例如 Order is an AR其中包含OrderLines Customer is an AR其中包含Orders 问题是 什么是AR其中包含Customer 我想它可能是 商店 之类的东西
  • EF 6:映射复杂类型集合?

    EF 6 代码优先 是否支持复杂类型集合 值对象集合 映射 我知道它支持复杂类型 但还没有找到我们拥有复杂类型集合的示例 例如 假设您有一个名为 Student 的实体 其中包含联系人集合 对于 NH 我可以简单地说 Student 有一个

随机推荐

  • django-reversion 撤消功能 - 恢复多个对象

    我正在尝试使用 django reversion 在 django 项目中实现 撤消 功能 以防用户意外修改多个对象 使用管理面板不起作用 因为必须一一恢复对象 我的问题是我无法创建包含多个对象数据的修订版本 即使当我这样做时 with r
  • React + Antd + Rollup 组件库“错误:无效的钩子调用。钩子只能在函数组件体内调用”

    我目前正在构建一个 UI 库来简化跨多个应用程序的维护 这些目前使用 Ant Design 一切似乎都很顺利 我在两者中都添加了我的对等依赖项package json and rollup config js 通过外部 我能够让 Rollu
  • 来自 Parcel.readException 的 NullPointerException (等)

    看起来像这样的异常令人困惑 FATAL EXCEPTION main java lang NullPointerException at android os Parcel readException Parcel java 1437 at
  • 导航抽屉 - 带 ListView 的标题视图

    我目前正在创建和定义一个导航抽屉 我现在想要一个标题视图 就像它们在谷歌应用程序上一样 位于项目行上方 我只找到了 RecyclerViews 的示例 但我不想使用它 我已经完成了 ListView 和所有其他东西 也许有人可以帮助我 提前
  • 如何在循环中使用链式构建器模式而不产生编译器错误?

    如何正确使用期望的构建器模式方法链接 https en wikipedia org wiki Method chaining在循环中 使用来自的示例log4rs https crates io crates log4rs 注意self不是一
  • MySQL 加入最大值

    通过在 Entry id 上加入下面的表格 我想从 food brands 表中提取具有最高 type id 的行 所以我应该得到下面的前 3 行 其中 type id 为 11940 食品品牌 id brand type id 15375
  • Python正则表达式,如何删除字符串中的所有匹配项

    我有一个正则表达式模式列表 rgx list pattern 1 pattern 2 pattern 3 我正在使用一个函数来循环列表 编译正则表达式 并应用findall获取匹配的术语 然后我想要一种从文本中删除所述术语的方法 def c
  • 从 mysql 数据库填充 Php 下拉列表[重复]

    这个问题在这里已经有答案了 我正在尝试从 mysql 数据库表填充下拉列表 这是代码 div class form group Select Make div
  • URL 缩短器:最佳编码方法?

    我正在创建一个链接缩短服务 并使用增量 ID 字段的 Base64 编码 解码来创建我的 url ID 为 6 的 url 为 http mysite com Ng http mysite com Ng 我还需要允许用户创建自定义网址名称
  • 来自模型和控制器的 cakephp 验证

    我已经在模型中进行了验证 另外 我在控制器中进行了一些验证以检查验证码 此后 应用程序不再显示模型验证错误 如果我评论控制器代码 模型验证工作正常并显示错误 两个都不行 型号代码 示例 class User extends AppModel
  • 如何直接从 Cython 调用 numpy/scipy C 函数,而不需要 Python 调用开销?

    我正在尝试在 Cython 中进行计算 该计算严重依赖于一些 numpy scipy 数学函数 例如numpy log 我注意到 如果我在 Cython 中的循环中重复调用 numpy scipy 函数 则会产生巨大的开销 例如 impor
  • 在页面上显示 # 个视图,而无需始终访问数据库

    越来越多的网站显示某些页面收到的浏览量 以及点击次数 如 dzone com 跟踪视图而不每次加载都访问数据库的最佳实践是什么 我脑子里有很多关于如何做到这一点的潜在想法 但似乎没有一个可行 谢谢 首次使用的用户 我会首先尝试数据库方法 返
  • android中如何从静态方法调用非静态方法

    我在从静态方法调用非静态方法时面临一个大问题 这是我的代码 Class SMS public static void First function SMS sms new SMS sms Second function public voi
  • Ansible sudo 在执行 5 个任务后挂起

    设置要求 本地用户 goagent1 ansible从GoCD启动 远程用户 myadmin myadmin 是一个需要密码的 sudoer 我们在剧本级别启用了 sudo Problem 该剧本似乎在执行了大约 5 个任务后停止了 发生得
  • “混合声明和代码”警告,值得解决吗?

    我最近启用了 pedanticgcc 上的选项 现在我收到大约两三页的 ISO C90 禁止混合声明和代码 警告 我这个项目的目标是能够将其部署在任何主流系统带有 C 编译器 所以我意识到假设 C99 将在所有地方都受支持是不明智的 但是是
  • Macvim 默认不会加载特定的配色方案

    我遇到了类似的问题VIM 配色方案默认不加载 https stackoverflow com questions 2637929 vim color scheme not loading by default 除了我遇到了这里找到的 gen
  • jQuery getJSON 将结果保存到变量中[重复]

    这个问题在这里已经有答案了 我使用 getJSON 从我的网站请求 JSON 它工作得很好 但我需要将输出保存到另一个变量中 如下所示 var myjson getJSON http 127 0 0 1 8080 horizon updat
  • 如何在 Eclipse 中使用 JavaFX 2 SDK?

    我已经安装了 JavaFX 2 0 SDK 现在我想使用 Eclipse 制作一个 JavaFX 应用程序 但我该如何使用javafx Eclipse 中的类 The 官方 JavaFX Eclipse 插件 http docs oracl
  • C# 7.0 独立丢弃混淆

    我想更好地理解几个涉及 C 7 0 丢弃功能的使用的示例 他们都利用所谓的单独丢弃 https learn microsoft com en us dotnet csharp discards a standalone discard 这是
  • CQRS 对于我的域是否正确?

    我正在对一个档案进行建模 它是视频点播系统的一部分 将存档想象成 Windows 资源管理器 其中多个用户可以创建文件夹 上传视频 重组文件夹等 有业务规则 权限 确定是否允许用户执行任务 即重命名文件夹 移动文件夹 查看文件夹等 我已将每