请教banq DDD聚合问题

07-08-21 robinone
在JiveJdon3的Forum,ForumThread,ForumMessage关联中哪个是聚合的根?在多个对象关联的情况下如何分辨出哪个是聚合的根?
         

banq
2007-08-21 10:35
Forum是聚合根。但因为ForumMessage非常重要,其中包含很多复杂元素,针对这些元素ForumMessage则是聚合的根。

聚合的根不是从关联中识别,因为只有识别出聚合的根,才设计出聚合等关联关系,不能从结果中寻找原因。

聚合的根是从需求中获得,那些我们关注的最主要的对象有可能就是一个包含很多聚合关系的根或者说总容器所在。这个也需要摸索和反复比较,聚合根找到,系统主要模型就确定,这是很关键一步。

[该贴被banq于2007年08月21日 13:36修改过]

robinone
2007-08-21 13:15
>Forum是聚合根。但因为ForumMessage非常重要,其中包含很多复杂元素,针对这些元素ForumMessage则是聚合的根。

是不是说在Forum,ForumThread,ForumMessage中可以按需求的不同角度建立出不同的聚合和该聚合的根?

>聚合的根不是从关联中识别,因为只有识别出聚合的根,才设计出聚合等关联关系,不能从结果中寻找原因。

如果按结果来讲Forum,ForumState组成一个聚合,Forum是根。

ForumMessage,Fourm,ForumThread组成一个聚合,ForumMessage是聚合根。

ForumMessage,Fourm,ForumThread,ForumThreadState组成一个聚合,ForumThread是聚合根。

这样子对吗?

DDD说聚合看作一个整体,外部对象只能引用聚合的根,如果删除聚合的根,所有的子项都会被删除。那么ForumMessage删除的话,FourmThread和Forum都会被删除,这样的逻辑好像不大对吧?

banq
2007-08-21 13:34
有些乱套了,重新整理思路如下:

首先我们必须区分关联和聚合区别。

Forum ForumThread和ForumMessage中, Forum和后两者是一般关联关系,而非聚合关系,因为一个论坛可以没有任何主题或帖子,空白论坛也是可以存在的。当然严格来说,没有内容的论坛是否称得上论坛?所以,前面我把Forum和后两者看成聚合关系了,如果是,那么Forum就是聚合的根了。

ForumThread和ForumMessage是聚合关系,一个主题系列必然包含一个ForumMessage。

当然ForumMessage对于其内部如ForumMessageState等都是聚合的根。

总之,必须先找出聚合来,再找出聚合的根。

[该贴被banq于2007年08月21日 13:41修改过]

robinone
2007-08-21 14:39
>首先我们必须区分关联和聚合区别。

Evans DDD的聚合和传统UML中的聚合的概念可能有些不同,Evans DDD书中写道:“一个聚合是一簇相关联的对象,出于数据变化的目的,我们将这些对象视为一个单元。”这个就是说聚合是一个范围,可能是多个对象之间的关系而不是两个对象之间的传统聚合的关系。

而banq所说的聚合是两个对象之间很强的整体和部分关系,您说的和Evans DDD所说的有所差别。

猜你喜欢
4Go 1 2 3 4 下一页