5

我最近一直在研究存储库模式,将其作为一种将所有持久性细节隐藏在涉及客户端代码的地毯下的方法。在阅读时,似乎存储库是/可以[通常?]负责聚合,而不仅仅是直接的类。

这对我来说很有意义,因为您可以有一个定义Posts的类和另一个定义Comments的类。这使得聚合成为理想的候选者,因为两者非常密切相关。但是,我将如何表示Users类及其与他或她的Posts的关系?

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

我曾尝试使用 Google 自己寻找答案,但我找到的很多示例都是独立的。即,Posts/Comment或者OrderOrderLine等。我找不到任何可以显示其他相关类如何组合在一起的东西。

我没有将它应用于任何特定的东西,尽管 PHP 或 Java/C# 可能是我希望使用这些想法的领域。无论如何,在我逃跑并创造一个怪物之前,我只是在探索并试图弄清楚其中的一些想法和概念。:)

感谢您的时间。

4

1 回答 1

5

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

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

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

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

于 2009-08-05T19:01:00.167 回答