关于JF框架中Domain events的一个“缺失”

10-10-31 flyzb
    实话说,banq的JF中的Domain events模型是非常不错的,能够让领域模型和其它层的交互隔离开来,并为提升性能提出了一条解决方案。

    但同时,“JF中的Domain events模型”的有一个对我来说非常大的缺失,没有提供领域内部的事件交互。应该说,JF的案例jivejdon的逻辑还比较简单,也就说领域模型内的对象间交互逻辑比较简单。我不太赞同“领域模型内部对象交互逻辑采取直接调用”的方式。因为我面临的业务是要做产品,经常遇到一个领域模型要应对不同用户场景的问题,打一个比喻:一个领域模型就像一个分子,这个分子内部包含一些原子;而不同业务场景就像一个外界刺激作用到这个分子上,这会造成原子间的连锁反应;对于这些不同场景,这些原子间的反应路径有相同的又有不同的。经过实践,我发现只能用事件才能真正解决这个问题,我称之为“事件路由”。当时我用的基于.net的spring.net,它有一个spring所没有的事件注入的功能,可以灵活地支撑对象间的事件交互。当然,spring.net的事件注入和JF的各有所长。不过我真心希望banq能在JF中加入这个功能,就JF而言@Send中可以加入@Model参数及其响应方法。另外,“事件路由”的业务场景非常复杂,一个事件可以有多个观察者,JF中可以定义多个@Send.

    呵呵,有什么不对,希望banq指正。

         

banq
2010-11-01 12:09
多谢肯定,原来设计设想是这样:如果你的领域层在一起,注意这个一起意思就在一个边界内部,如在一个聚合内部,那么他们之间可以使用其他事件模式,比如观察者模式 mediator模式或者command模式 等其他设计模式来解决。

因为JF提供的领域事件是一种非常松散的事件模式,适合两个聚合之间,比如如果两个领域聚合之间要互相调用,也可以通过领域事件,只不过它们中间要引入一个技术架构层,也就是说,A领域聚合通过领域事件发送消息个消息总线,消息总线作为技术架构层,驱动B领域层,反过来也然,提供一个参考文章:

基于EDA和CQRS的拍卖案例

猜你喜欢