3 Comments

  1. 我觉得关键是一致性,领域事件本质是引入观察者设计模式进行解耦,如果强行让两个聚合根 分开在两个事务当中,我并没有看到优点,在小型系统中 引入两阶段提交 三阶段提交这些复杂的东西,反倒是让原本简单的东西 变复杂了

  2. 宝藏在哪

    “我觉得关键是一致性,领域事件本质是引入观察者设计模式进行解耦,如果强行让两个聚合根分开在两个事务当中……”

    确实是这样,不过我认为作者所表达的和你所表达的意思是比较接近的,角度不一样。

    其实你可以看到文章中提到了:“在微服务内部使用领域事件时,我们不一定非得引入消息中间件(比如ActiveMQ等)。还是以上面的“注册后发送欢迎邮件”为例,注册行为和发送邮件行为虽然通过领域事件集成,但是他们依然发生在同一个线程中,并且是同步的。”

    这段话强调的重点就是领域事件也可以是本地的调用,主要是为了解耦。既然是本地事件,完全有理由在一个事务中更新两个聚合根。

    只是不要忘了关键在于解耦,所以我们是不能显式的将多个聚合根放在一个事务方法中去做更新,而是要通过事件驱动,通过框架隐式的实现在一个事务中更新多个聚合根。

    事实上,文章后面提到的各种领域事件的实现方式都不用手动去实现。spring,spring-data, spring-domain-events已经对此提供了相当良好的支持了。

    注: spring-domain-events这个项目还处于个人维护的状态,他的出现是为了弥补spring-data关于领域事件支持的缺陷的。

    • 滕云

      作者回复:是的,当前spring data中也提供了对领域事件的支持。只是就个人而言,我不太喜欢这种强耦合于spring框架的做法。

发表评论

电子邮件地址不会被公开。 必填项已用*标注