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

Php 聚合和存储库。如何确定总量?,php,design-patterns,oop,repository-pattern,aggregation,Php,Design Patterns,Oop,Repository Pattern,Aggregation,我最近一直在研究存储库模式,将其视为一种将持久性的所有细节都隐藏在客户机代码之下的方法。环顾四周,似乎存储库[通常?]负责聚合,而不仅仅是直接的类 这对我来说很有意义,因为你可以有一个类定义帖子,另一个类定义评论。这是一个理想的聚合候选对象,因为两者密切相关。但是,我如何表示用户类及其与他或她的帖子的关系 用帖子/评论聚合用户,或者让用户单独使用,仅仅通过一个好的老式引用建立关联,这样做有意义吗 我曾尝试自己用谷歌寻找答案,但我发现的很多例子都是独立的。也就是说,发布/评论或者可能是订单和订单行

我最近一直在研究存储库模式,将其视为一种将持久性的所有细节都隐藏在客户机代码之下的方法。环顾四周,似乎存储库[通常?]负责聚合,而不仅仅是直接的类

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

帖子/评论聚合用户,或者让用户单独使用,仅仅通过一个好的老式引用建立关联,这样做有意义吗

我曾尝试自己用谷歌寻找答案,但我发现的很多例子都是独立的。也就是说,发布/评论或者可能是订单订单行等等。我找不到任何可以显示其他相关类如何结合在一起的内容

我没有将此应用于任何特定的领域,尽管PHP或Java/C可能是我希望使用这些想法的领域。在任何情况下,我只是探索并试图在我逃跑并创造一个怪物之前了解其中的一些想法和概念。:)


谢谢您的时间。

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

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

在您的情况下,当您删除一篇文章时,我假设您也会删除评论,但不会删除创建该文章的用户或对其发表评论的用户。因此,您定义post/comment聚合是正确的,但是将用户分组到该聚合中是没有意义的


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

啊,我明白了。如果一个对象完全依赖于另一个对象,那么聚合它们是有意义的。因此,没有帖子,评论就不可能存在。虽然我想你需要在某些地方划清界限-删除用户不一定意味着他们的帖子/评论消失,即使他们这样做了,将用户作为一个单独的实体还是更有意义的。顺便说一句,查询数据库的实际SQL(或我用于持久化的任何机制)的逻辑位置在哪里?它是在存储库中还是在聚合中。。。甚至更低?谢谢你的帮助!你明白了。存储库的作用就好像它是内存中的集合一样,但它被实现为转到您的数据存储。这意味着存储库的接口没有提到SQL或数据访问,但是实现提到了,这是您的抽象。