关于jiveeJdon中聚合的疑惑?

09-10-30 160649888
         

banq老师你好

有个问题想请教下,就是关于FormThread和FormMessage是否是聚合关系的疑惑?

在我的理解中,FormThread应该是FormMessage的一个聚合根,因为1:当删除一个FormThread的时候,就应该删除这个FormThrea下的所有FormMessage。2:FormMessage脱离了FormThread应该就没有意义了,一个回帖只会是在FormThread下才会有意义。

在代码中,我看到的好像是FormMessage是聚合根(我可能理解有错),我想问下是出于什么原因要这么设计?

请banq老师和各位大侠解惑下。谢谢

         

1
banq
2009-10-30 09:27

ForumThread是聚合根,ForumThread与RootMessage概念又重合在一起,因为ForumThread中聚合的ForumMessage是RootMessage,不是普通的ReplyMessage,而ForumMessage实质是RootMessage。

这些设计中有一些重叠,考虑精简原因,没有再进行分离,容易让人疑惑。

160649888
2009-10-30 10:44

还有个问题:

ForumThread是ForumMessage的根,那为什么在获取某个ForumThread中的ForumMessage的时候,是直接从数据库中查询呢?是为了减少内存泄漏的缘故吗(因为有些FormThread中跟帖会很多)?这算不算是因为数据库的原因而进行的折中。

MessageListAction中的:

ForumMessageQueryService forumMessageQueryService = (ForumMessageQueryService) WebAppUtil.getService("forumMessageQueryService", request);

return forumMessageQueryService.getMessages(new Long(threadId), start, count);

缓存 是只缓存到ForumThread这级吗?

banq
2009-10-30 11:52

DDD对这种聚合体内大数据量 提供两种方式,一个通过聚合根遍历,一个就是采取查询,这里采取查询方式,在聚合根ForumThread中保留ForumMessage的ID集合,是一个树形结构的ID集合,尽管目前功能没有发挥这个树形结构威力,但是未来会开发出来的。

对每个ReplyMessage,是使用缓存到ReplyMessage,ForumThread也缓存。

160649888
2009-10-30 12:04

谢谢banq老师指点,等我研究多点后,再请老师指点下。