经过一些后续的思考后,我发现上面的领域模型中的帖子(Thread)的一些职责的设计有点问题。详细分析如下:
如果直接让帖子(Thread)维护回复(Post),那么当我们要添加一个回复时,必须把帖子的所有回复取出来,然后才能添加,这样势必会导致性能低下。本来依据信息专家模式,我们应该将添加回复的职责交给帖子来完成,但是因为遇到性能问题,我们必须考虑选择其他方案来即能在业务上保持帖子和回复的业务关系完整性,又不会有性能问题。
经过我的思考,我认为在ThreadRepository中完成这个职责比较合理。原因是:ThreadRepository是维护Thread的,因此它知道所有的Thread以及每个Thread聚合的内部细节,否则ThreadRepository无法对Thread进行持久化。所以,我们可以给ThreadRepository增加一个职责:AddThreadPost(threadId, post),该职责表示为某个帖子增加一个回复。AddThreadPost内部实现时不必先把Thread取出来到内存,而是可以直接操作关系数据库;依照这个推理,UpdatePost方法也可以这样实现;
我的这个解决方案如何呢?