如果涉及到复杂的聚合根,我现在无法理解Spring Data REST的概念。如果我正确理解领域驱动设计(这是Spring Data的基本原则?),你只能通过存储库公开聚合根。
假设我有两个类Post
和Comment
。两者都是实体,Post
有一个@OneToMany List<Comment> comments
。
由于Post
显然是聚合根,我想通过PostRepository
访问它。如果我创建@RepositoryRestResource public interface PostRepository extends CrudRepository<Post, Long>
,那么对Post
的REST访问就可以正常工作。
现在comments
被渲染为内联,并且不像/posts/{post}/comments
一样公开为子资源。只有当我引入CommentRepository
时才会发生这种情况(如果我要坚持DDD,就不应该这样做)。
那么如何使用Spring Data REST处理复杂的领域对象呢?假设您必须检查所有评论总共不超过X个字符。这显然是由Post
聚合根处理的不变量。您将在何处放置Post.addComment()
的逻辑?如何将其他类公开为子资源,以便我可以访问/posts/{post}/comments/{comment}
而不引入不必要的存储库?