代码之家  ›  专栏  ›  技术社区  ›  Etzeitet

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

  •  4
  • Etzeitet  · 技术社区  · 15 年前

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

    这对我来说是有意义的,因为你可以定义一个类 帖子 还有另一个定义 评论 . 这是一个理想的候选人,因为这两个是非常密切的关系。但是,我如何代表 用户 阶级及其与阶级的关系 帖子 ?

    将用户聚合到 帖子/评论 聚合或保留 用户 仅仅是通过一个好的老式的参考来建立联系?

    我试过用谷歌寻找答案,但我发现很多例子都是独立的。IE 帖子/评论 或者也许 秩序 订单线 等等,我找不到任何能说明其他相关类是如何组合在一起的。

    我并不把它应用到任何特定的东西上,尽管PHP或Java/C可能是我希望使用这些想法的领域。在任何情况下,我只是在探索和尝试让我的头脑围绕这些想法和概念,然后我跑去创造一个怪物。:)

    谢谢你抽出时间。

    1 回复  |  直到 15 年前
        1
  •  3
  •   Stefan Moser    15 年前

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

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

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

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