【问题标题】:Event sourcing a domain with several layers of object composition事件溯源具有多层对象组合的域
【发布时间】:2014-05-04 23:38:01
【问题描述】:

我已经阅读了很多关于事件溯源和 CQRS 的精彩文章,这个概念很有趣,但这些示例通常都是极其简单的领域(例如发票、会议活动、一组博客文章和它们关联的 cmets)。

假设我们有一个更复杂的领域,比如保险单,其中我们有更深层次的关系:

class Policy {
   List<Driver> drivers
   List<Vehicle> vehicles
   List<Coverage> coverages
}

司机可能有地址和联系信息,覆盖范围有子覆盖范围等。

我可以在这些对象中的每一个上分别创建类似 CRUD 的事件(例如 DriverCreate、DriverUpdate),但是如果我们想将策略的状态回退到特定日期,我们如何知道要回退哪些事件?

一般来说,是否有任何资源可以描述在这种开发范式中如何处理关系

【问题讨论】:

    标签: scala cqrs event-sourcing


    【解决方案1】:

    我已经研究过这样的系统,即使不是为了保险 ;-) 我们选择的策略如下。由于标识符,我们已经链接了我们的事件。为此,您的 Policy 类将添加一个字段“id”。完成后,可以创建这样的事件:

    case class PolicyDriverAdded(id: UUID, driver: Driver)
    case class PolicyDriverRmoved(id: UUID, driver: Driver)
    

    这是最简单的策略。另一种方法是将完整的收藏放在您的活动中......两次:

    case class PolicyDrivesChanged(id: UUID, oldDrivers: List[Driver], newDrivers: List[Driver])
    

    第二个选项更强大,可以让您获得回放所需的数据。

    【讨论】:

      猜你喜欢
      • 2015-08-29
      • 2019-05-10
      • 1970-01-01
      • 1970-01-01
      • 2021-07-25
      • 2022-10-23
      • 2013-01-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多