DDD 中两个限界上下文之间的通信

2024-01-18

我有几个不同的有界上下文在域中。 CRUD 操作的验证是在每个限界上下文中构建的。

例如,我可以仅当创建者是组长时才创建名为 GAME 的实体.

在这个例子中我有两个有界上下文(BC)。其一是Game BC另一个是User BC。为了解决这个问题,在Game BC,我必须进行域服务调用,例如IsGroupLeader() to the User BC在继续创建游戏之前。

我认为 DDD 不推荐这种类型的通信。我可以有一个用户实体也在Game BC,但我不想,因为同样用户实体在不同的 BC 的不同上下文中使用不同的方式。

我的问题是:

  1. 我应该使用域事件吗Game BC必须发送一个事件到User BC询问用户状态?通过这种方法,我不会像这样进行同步调用是组长但有一个事件叫做is_group_leader。然后Game BC必须等待User BC处理事件并返回状态。只有在User BC处理完事件后,Game BC才会创建Game实体。

  2. CQRS 可以解决我的问题吗?

任何想法表示赞赏。


集成 BC 时,您有几种选择。不鼓励呼叫外部 BC 的原因是它要求两个 BC 同时运行。然而,这通常是可以接受的,并且比替代方案更简单。另一种方法是让游戏 BC 订阅来自用户 BC 的事件并保留其所需数据的本地副本,在本例中是有关用户是否是组长的信息。这样,当Game BC需要判断用户是否为组长时,不需要调用User BC,只需读取本地存储的数据即可。此次的挑战事件驱动 http://en.wikipedia.org/wiki/Event-driven_architecture另一种方法是同步事件。您必须确保游戏 BC 收到来自用户 BC 的所有适当事件。另一个挑战是处理最终一致性 http://en.wikipedia.org/wiki/Eventual_consistency,因为 BC 在任何给定时间点可能会稍微不同步。

CQRS 与这个问题有些正交。

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

DDD 中两个限界上下文之间的通信 的相关文章

  • BL 服务:异常还是方法结果?

    最好的方法是什么 为什么 V1 try var service IoC Resolve
  • 有界上下文共享相同的聚合

    DDD 公开了有界上下文 领域模型 聚合 但我经常错过业务规则的关键点 我想知道业务规则如何集成到这种方法中 这是一个例子 假设您在一家信贷公司中有 2 个有界上下文 一项用于追偿债务 另一项用于提前退款 这些背景嵌入了真正的业务特性 从概
  • 是否有在基于 DDD 的分层架构中的模型层和数据访问层之间使用 LINQ 的建议模式

    我一直在读蒂姆 麦卡锡的书关于 NET 中的 DDD 的精彩书籍 http www amazon co uk NET Domain Driven Design Solution Programmer dp 0470147563 但在他的示例
  • CQRS 对于我的域是否正确?

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

    我正在尝试学习 DDD 的概念 我做了一个项目 我使用数据库优先方法 在基础设施中 我添加了一个 edmx 文件 我选择自动生成实体 现在在 域 中我正在尝试创建聚合 但在这里我遇到了一些问题 我正在尝试创建一个名为 User 的聚合 但
  • 涵盖 .NET 中的 TDD、DDD 和设计模式的书籍

    我想要一本能够真正让我全面了解使用 C TDD ASP NET MVC DDD 和设计模式 例如存储库模式 的现代 ASP NET 开发的书 我非常擅长 C 和 ASP NET MVC 但想填补空白 如果您对涵盖这些主题的一两本书有很好的体
  • 使用 JPA 实体作为域模型是一个好习惯吗?

    或者创建一个由域模型组成的域层并与 JPA 实体对话以进行数据库访问 两种方法的优缺点是什么 谢谢 这确实取决于您对域进行编码的方式 一般来说 在 Java 中 我更喜欢创建一组单独的 JPA 注释的 DTO 来处理持久性 此类 DTO 将
  • 实体框架中的聚合根支持

    我们如何告诉实体框架骨料 http domaindrivendesign org node 88 保存聚合时 保存聚合内的实体 删除聚合时 删除聚合内的实体 当两个不同的用户尝试修改同一聚合中的两个不同实体时引发并发错误 加载聚合时 即使在
  • 除了“真实”对象之外,DDD 存储库还可以使用摘要对象吗?

    假设我正在创建一个存储库来存储数字电子书 如下面的界面所示 该存储库将存储书籍的实际文本以及标识书籍的元数据 标题 作者 出版商 ISBN 等 public interface IBookRepository void AddBook Bo
  • DDD 聚合和值对象

    我想问一下关于DDD功能的问题 假设我们有两个聚合 每个聚合都包含值对象地址 根据 Eric Evans DDD 我们应该将聚合彼此隔离 因此第一个聚合的聚合根不能有指向 Address 的链接 坦白说 这对我来说似乎没有意义 所以问题是如
  • 领域驱动设计:处理原子操作和事务

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

    我一直在研究领域驱动设计领域事件 http www udidahan com 2009 06 14 domain events salvation 我真的很喜欢这些事件提供的关注点分离 我遇到了保留域对象和引发域事件的顺序问题 我想在域对象
  • 定时任务应该放在哪一层?

    我正在尝试使用分层架构来实现 DDD 应用程序 我有 基础设施层 实现应用程序的技术特定部分的层 领域层 包含领域模型的层 应用层 包含与领域模型交互的干扰的层 接口层 从外部接收事件的层 经典的 3 层 基础设施 架构非常清晰 但我的应用
  • 如何使用 J Oliver 的 EventStore 库?

    我一直在研究一个新项目的事件溯源 使用 J Oliver 的 EventStore 和 mongo 作为持久层 但遇到了一些问题 在尝试事件溯源之前 我的域持久保存到数据库 并且我一直在使用 Udi 的域事件pattern http www
  • EF 6:映射复杂类型集合?

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

    如果我完全破坏了 DDD 概念 请轻轻地告诉我 但这就是我的困境 假设我有以下域模型 Teacher IList
  • 使用实体框架时是否应该使用部分类作为业务层?

    我正在开发一个使用实体框架的项目 使用EF生成的类的部分类作为业务层可以吗 我开始认为这就是 EF 的用途 我尝试使用 DTO 模式 很快意识到我只是创建了一堆映射类 这重复了我的工作 而且还导致更多的维护工作和额外的层 我想使用自我跟踪实
  • 使用非英语的通用语言? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 在讨论最近项目的规范和功能要求时 我们正在与领域专家讨论荷兰语的会计术语 因为整个团队和客户都是以荷兰语为母语的人 当开发开始时 我们很自然地用英语实
  • 不要模拟值对象:过于通用的规则,没有解释

    以下是 Mockito 单元测试框架的引用 不要模拟值对象 为什么有人会想要这样做呢 因为实例化对象太痛苦了 gt 无效 原因 如果创造新的装置太困难 那就是一个迹象 代码可能需要一些认真的重构 另一种方法是创建 价值对象的构建者 有一些工
  • DDD - 乐观并发属性(etag 或时间戳)是否应该成为域的一部分?

    从理论上讲 如果我们在聚合根级别实现乐观并发 更改 AR 中的实体会更改 AR 上的版本 并且假设我们使用时间戳作为版本属性 只是为了简单起见 时间线应该是 AR 上的属性还是应该是一侧和另一侧的读取模型的一部分 例如更新 是应用程序服务的

随机推荐