DDD \ ES \ CQRS中应用程序的CRUD部分

时间:2013-02-20 13:58:27

标签: domain-driven-design cqrs event-sourcing

我想在我的项目中使用DDD \ CQRS \ ES。我刚开始使用它,所以我没有很多经验。我知道现有的核心域,支持域和CRUD域。我的核心域名引用了CRUD数据。例如,Order中有很多业务规则,但它包含有关Delivering Company,接收点等的基本信息。

这些信息由管理员管理。在我看来,我应该使用crud方法但是当我需要回滚事件时会发生什么?

系统将存储数据混合 - 从事件源恢复,实际从应用程序的crud部分恢复。我最终会得到不一致的数据。例如,订单可能由不存在的公司维护(该公司在交付包时已由管理员删除,但在回滚订单仍处于活动状态后) 在每个项目中都是CRUD数据的一部分,那么你如何处理这个问题呢? 我应该存储公司活动吗?

此外,当我添加新订单时,我应该通过事件发送公司名称和ID,因为当我重建我的ReadStore时,数据库中可能没有公司,所以我无法从存储库获取companyName

PS。你知道任何CRUD框架可以处理简单的CRUD操作吗?

PS.2您是否知道在ES \ CQRS方法中包含应用程序的CRUD部分的任何示例开源项目?


确定。也许我把它描述得太复杂了。我只是想知道:

  • 如何实现最简单的应用程序(业务不佳) 逻辑 - 主要是CRUD操作)当我存储我的核心域时 事件商店,我希望能够恢复以前的状态 我的核心域名

  • 我是否应该在事件存储中存储crud操作?

  • 如何在回滚事件存储后提供数据一致?

  • 您推荐哪种CRUD框架用于Java应用程序?

3 个答案:

答案 0 :(得分:2)

我认为在处理DDD时尤其是在处理ES时这是一个常见问题。这可能听起来很简单,但您需要查找的是域中有界的上下文。事实证明,这种有界的上下文非常适合SOA的服务。现在,当您进入SOA时,您意识到并非所有服务(作为SOA中的S而不是Web / Windows服务中的服务)都需要实现相同的服务。

根据我的经验,您总是会有一些服务主要处理CRUD操作和非常少的业务逻辑,通常由管理员/特殊用户使用的应用程序使用。这种服务可以而且应该尽可能少地实施,没有CQRS和ES,也不会使它们过于复杂。只要确保他们在发生某些事情时发布相关消息。

我强烈推荐Eric Evans - what i've learned about DDD since the book video

Udi Dahan也有一些关于SOA的非常好的视频以及SOA的含义:Avoid a failed SOAUdi on SOA

我意识到这实际上并没有回答你问题的所有细节,但我希望它会指出你正确的方向。

答案 1 :(得分:0)

为什么不简单地将CRUD部分视为仅附加(如果必须,可以允许更新)或将足够的数据复制到事件中以使重要数据不会丢失?

答案 2 :(得分:-1)

我不知道你究竟要问的是什么,但如果它涉及DDD和CRUD操作,Cocktail framework可能对你有所帮助,尽管我没有亲自尝试过。