Java 在restishweb服务中应用DDD原则
我正在开发一个RESTish web服务。我想我理解了聚合和合成之间的区别。聚合不会对其引用的对象强制执行生命周期/范围。组合不会对其包含/拥有的对象强制执行生命周期/范围 如果我删除一个复合对象,那么它包含/拥有的所有对象也将被删除,而删除聚合根不会删除引用的对象 1) 如果删除聚合根确实不需要删除引用对象,那么没有引用对象的存储库又有什么意义呢?或者,聚合根是指复合对象的术语吗 2) 当您创建一个web服务时,您将有多个端点,在我的例子中,我有一个实体Java 在restishweb服务中应用DDD原则,java,spring,hibernate,spring-mvc,domain-driven-design,Java,Spring,Hibernate,Spring Mvc,Domain Driven Design,我正在开发一个RESTish web服务。我想我理解了聚合和合成之间的区别。聚合不会对其引用的对象强制执行生命周期/范围。组合不会对其包含/拥有的对象强制执行生命周期/范围 如果我删除一个复合对象,那么它包含/拥有的所有对象也将被删除,而删除聚合根不会删除引用的对象 1) 如果删除聚合根确实不需要删除引用对象,那么没有引用对象的存储库又有什么意义呢?或者,聚合根是指复合对象的术语吗 2) 当您创建一个web服务时,您将有多个端点,在我的例子中,我有一个实体Book,另一个名为Comment。如果
Book
,另一个名为Comment
。如果书被删除了,在我的应用程序中留下评论是没有意义的。因此,书是一个复合对象。我想我应该而不是拥有一个评论库,因为这会破坏book类可能拥有的生命周期和规则的实施。但是,我有如下URL(仅示例):
现在,如果我没有注释库,这是否意味着我必须加载book对象,然后返回引用的注释?是否允许我从BookRepository返回注释实体列表,这有意义吗?通过各种方法,图书的存储库最终可能变得相当大。我是否可以编写JPQL(JPA查询),以注释为目标,而不是以存储库中的书籍为目标?如何分页和过滤评论。添加由POST端点触发的新注释时,是否需要加载书本,将注释添加到书本,然后更新整个书本对象
我目前正在做的是拥有一个自己的评论库,即使这些评论会随书一起删除。我可能需要一些关于如何正确操作的指导。由于您在RESTish服务中不仅公开根对象,我想知道如何在后端处理这个问题
我正在使用Hibernate和Spring 您的REST资源不必与JPA实体完全匹配。即使您不打算将注释公开为根REST资源,有时将其建模为JPA实体并为其建立存储库仍然是有意义的。支持这一点的几点:
- 如果你预计一本书会有大量的评论,那么保存一个
通过将其添加到
书中进行注释。注释
集合可能非常有用 效率低下李>
- 当
处于禁用状态时,编辑和删除注释将更加容易 一个实体,它有自己的ID注释
- 分页实现可能非常复杂 如果
注释
是值对象,则效率低下
- 当
- 两个实体:
和Book
Comment
- DB中的外键,确保 当一本书被删除时,所有注释都将被删除李>
- 每个实体的存储库
将有一个方法CommentRepository
findByBook()
- /REST接口中的book/{id}/comments
GET /books/1/comments
POST /books/1/comments