聚合和存储库。如何确定聚合?

时间:2009-08-04 03:01:11

标签: php design-patterns oop repository-pattern aggregation

我最近一直在查看存储库模式,以便在客户端代码所关注的地毯下刷新持久性的所有细节。虽然阅读它似乎是一个存储库/可以[通常?]负责聚合而不仅仅是直接的类。

这对我来说很有意义,因为你可以有一个定义帖子的课程和另一个定义评论的课程。这是聚合的理想候选者,因为这两者是非常密切相关的。但是,我如何代表用户类及其与帖子的关系?

使用帖子/评论聚合来聚合用户是否有意义,或者单独保留用户并通过良好的老式参考进行关联?

我曾尝试使用Google自己寻找答案,但我发现的很多例子都是独立的。即帖子/评论或者订单 OrderLine 等。我找不到任何显示其他相关类如何组合在一起的内容。

我不是将它应用于任何特定的东西,尽管PHP或Java / C#可能是我希望使用这些想法的领域。在任何情况下,我都只是在探索并试图了解一些这些想法和概念,然后才开始创造一个怪物。 :)

感谢您的时间。

1 个答案:

答案 0 :(得分:3)

存储库模式定义相当松散,并不一定与聚合模式有任何关系。但是,如果您订阅了DDD的处理方式,那么是的,存储库对于聚合来说是唯一的。

让我们从DDD的角度来看看这个。 DDD表示聚合中的对象可以引用另一个聚合根,但聚合中的对象只能通过根访问。确定聚合的经验法则是删除根时应删除的内容。但是,与大多数方法论相比,DDD不鼓励使用关系,只是因为域中存在关系,它不需要存在于域的模型中,所以请记住这一点。

在您的情况下,当您删除帖子时,我认为您也会删除评论,但不会删除创建帖子的用户或评论帖子的用户。因此,您在定义帖子/评论聚合方面是正确的,但将用户分组到该聚合中是没有意义的。

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