Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在restishweb服务中应用DDD原则_Java_Spring_Hibernate_Spring Mvc_Domain Driven Design - Fatal编程技术网

Java 在restishweb服务中应用DDD原则

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。如果

我正在开发一个RESTish web服务。我想我理解了聚合和合成之间的区别。聚合不会对其引用的对象强制执行生命周期/范围。组合不会对其包含/拥有的对象强制执行生命周期/范围

如果我删除一个复合对象,那么它包含/拥有的所有对象也将被删除,而删除聚合根不会删除引用的对象

1) 如果删除聚合根确实不需要删除引用对象,那么没有引用对象的存储库又有什么意义呢?或者,聚合根是指复合对象的术语吗

2) 当您创建一个web服务时,您将有多个端点,在我的例子中,我有一个实体
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

这个问题似乎离题了,因为它属于programmers.se。
GET /books/1/comments
POST /books/1/comments