使用依赖注入实现聚合根之间调用的逻辑悖论
DDD中如果有两个聚合根调用,如何解决?如果还是使用依赖注入,就会发生聚合根嵌套的可笑事情发生。
以代码为例子:有两个聚合根类AggregateRoot1 AggregateRoot2,AggregateRoot1的方法依赖AggregateRoot2实现,如果采取依赖注入,也就是Spring等框架做法如下:
|
AggregateRoot1的dosth方法依赖AggregateRoot2的dosth方法,不自觉就将AggregateRoot2使用依赖注入,但是这样就造成了AggregateRoot1聚合AggregateRoot2的现象,AggregateRoot2还是聚合根吗?
什么是聚合?
|
这段代码表达了A聚合了B,也就是说整体A包含了部分B,A和B关系是父与子,整体与部分的关系。
我们使用这种聚合关系表达A是B的父对象,对于DDD聚合,如果A不再被其他对象引用,类似二叉树的一个根节点,那么我们认为A就是聚合根。
但是,因为依赖注入,我们破坏了业务上的聚合根概念。
那么两个聚合根之间相互调用怎么办?
只有通过事件。
[该贴被banq于2013-04-12 17:18修改过]