2009-08-04 72 views
4

我最近一直在研究存储库模式,以刷新关于客户端代码的地毯下的持久性的所有细节。在阅读时看来,Repository可以[通常]负责聚合,而不仅仅是直接的类。聚合和存储库。如何确定总量?

这对我有意义,因为你可以有一个类定义职位和另一个定义评论。这是一个理想的候选人,因为两者密切相关。然而,我将如何代表一个用户类别及其与他或她的关系的帖子

难道意义与帖子汇总用户/评论骨料,或保持用户本身,只是有通过良好的老式参考的关联?

我试过寻找自己使用谷歌的答案,但很多我发现的例子都是独立的。即帖子/评论或许订单OrderLine等我找不到任何显示其他相关类如何适合在一起的任何东西。

我没有把这个应用到任何特定的东西,尽管PHP或Java/C#可能会是我期待使用这些想法的区域。无论如何,我只是在探索并试图让我的脑海中浮现出一些想法和概念,然后才跑出来创造一个怪物。 :)

谢谢你的时间。

回答

3

存储库模式相当松散地定义,并不一定与聚合模式有任何关系。但是,如果您订阅DDD的做法,那么是的,存储库对于聚合是独一无二的。

所以让我们从DDD的角度来看看这个。 DDD表示聚合中的对象可以引用另一个聚合根,但聚合中的对象只能通过根访问。确定聚合的经验法则是在删除根时应该删除的内容。但是,DDD不仅仅是因为关系存在于一个域中,而且它不需要存在于域的模型中,所以不要仅仅考虑这一点,而是不鼓励使用关系。

就你而言,当你删除一篇文章时,我假设你也将删除评论,但不是创建该文章的用户或评论该文章的用户。因此,您在定义帖子/评论汇总时是正确的,但将用户分组到该汇总中是没有意义的。

作为自己的聚合的用户可以包含与其所有帖子的关系,因为Post是聚合根。你也可以在PostRepository上实现这个方法来获取给定用户的所有帖子。希望有所帮助!

+0

啊我明白了。如果一个对象完全依赖另一个对象,则合并它们是有意义的。所以评论不能没有帖子。虽然我猜你需要在某些地方画线 - 删除用户不一定意味着他们的帖子/评论消失,即使他们这样做,无论如何,将用户作为单独的实体更有意义。作为一个小问题,在哪里放置实际的SQL来查询数据库[或任何用于持久化的机制]?它会在Repository或Aggregates中,还是会降低?感谢您的帮助! – Etzeitet 2009-08-05 19:49:06