领域服务和领域事件如何取舍?或共存?
各位大大,当业务功能涉及到多个聚合的时候,有多种方式进行处理,其中有两种方式使用比较普遍,一种是领域服务,另一种是领域事件,也不排除两种同时存在的情况,那如何取舍呢?
一个系统中很多业务功能都会涉及到2个或多个聚合,如果使用领域服务,将会导致在领域层会存在大量的领域服务类,这种方式实现的效果同传统的三层框架中的服务层实现的效果差不多,唯一区别只在于领域服务是将具体的业务逻辑放到领域对象中,而服务层是将所有的业务逻辑直接写在服务层中;
更好的方式是采用发送领域事件的方式,即没有领域服务,当一个业务功能涉及到多个聚合的时候,通过同步事件来进行聚合之间的交互,拿CQRS来说,领域对象中的业务逻辑是由命令处理器来调用的,当一个业务设计到聚合A-->聚合B-->聚合C三个聚合,但聚合A处理完相应的业务逻辑后,修改自身状态,然后发送领域事件到事件总线,然后由事件总线将这个事件立即分发到聚合B,并依次到聚合C,那就意味这在聚合A执行业务逻辑之前,必须手动地将聚合B和C同时注册到事件总线中(这个注册必须在之前的命令处理器中进行),当所有业务逻辑都处理完成之后再将其进行反注册,以取消B和C对A产生事件的关注。
不知以上我的理解有无问题?欢迎大家批评指正
[该贴被wilsonp于2014-06-26 15:56修改过]