我正在开发一个 RESTish Web 服务。我想我明白了聚合和组合之间的区别。聚合不会对其引用的对象强制执行生命周期/范围。组合确实对它包含/拥有的对象强制执行生命周期/范围。
如果我删除一个复合对象,那么它包含/拥有的所有对象也会被删除,而删除聚合根不会删除引用的对象。
1) 如果删除聚合根确实不需要删除引用的对象,那么没有引用对象的存储库有什么意义?还是聚合根是指所谓的复合对象的术语?
2)
当您创建一个 Web 服务时,您将有多个端点,在我的例子中,我有一个实体Book
和另一个名为Comment
. 如果这本书被删除,在我的应用程序中留下评论是没有意义的。因此,书是一个复合对象。我想我不应该有一个评论存储库,因为这会破坏生命周期和书籍类可能拥有的规则的执行。但是我有 URL,例如(仅示例):
GET /books/1/comments
POST /books/1/comments
现在,如果我没有评论存储库,这是否意味着我必须加载 book 对象然后返回引用的评论?我是否可以从 BookRepository 返回评论实体列表,这有意义吗?Book 的存储库最终可能会随着各种方法变得相当大。我是否允许编写针对评论而不是存储库内书籍的 JPQL(JPA 查询)?评论的分页和过滤呢?添加由 POST 端点触发的新评论时,是否需要加载图书,将评论添加到图书,然后更新整个图书对象?
我目前正在做的是拥有自己的 CommentRepository,即使评论已随书一起删除。我可能需要一些关于如何正确执行的指导。由于您不仅要在 RESTish 服务中公开根对象,我想知道如何在后端处理这个问题。
我正在使用 Hibernate 和 Spring。