领域内的对象交互问题
聚合根对象中一般都存在着对本领域内其他对象的引用,当修改内部引用对象的状态的时候,由聚合根上的方法发出相应的内部领域事件,然后在聚合根上的内部领域事件处理器来处理相关的领域事件,同时修改状态,那同一个聚合中的对象之间交互采用引用调用修改呢?还是从新发出一个事件来进行修改呢?
比如User聚合根中存在这Address的引用(假定该Address是User聚合中的一个实体,而非值对象),此时命令处理器发出了"修改地址"的命令,那么在User聚合根中的changeAddress(Address newAddress)方法会被命令处理器调用,那在changeAddress方法体内就可以发出一个“内部领域事件”---AddressChangedEvent,且在User中存在这相应的handle(AddressChangedEvent event)方法来对该事件进行处理(及修改User对象的状态),此时问题就出现了:有两种方式进行处理:
1、直接调用Address中的另一个方法,来修改该Address的状态(直接使用引用)
2、发出一个事件,由Address来处理该事件,并改变Address的状态(事件机制)
第一种的意图就是聚合根处理自己的内部状态,如果是引用则直接调用其set方法修改其状态;第二种则是在聚合根的事件处理中再次发出事件,然后让引用对象自己处理,但会导致领域内的事件非常多,导致事件风暴
不知道这两种方式哪种比较好,欢迎讨论....
[该贴被wilsonp于2014-04-26 13:02修改过]