Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.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
Domain driven design DDD设计与HttpDelete_Domain Driven Design - Fatal编程技术网

Domain driven design DDD设计与HttpDelete

Domain driven design DDD设计与HttpDelete,domain-driven-design,Domain Driven Design,我不熟悉DDD设计概念,但我想在阅读相关文章时澄清一些事情。Jimmy Boggard使用以下词语: “聚合边界之外的任何内容都不能包含对内部任何内容的引用,根实体除外。”,“只有聚合根可以通过数据库查询直接获得。其他所有内容都必须通过遍历完成。” 假设我想删除一篇文章的评论。在这里,据我所知,post是root。因此,所有与评审的沟通都应该通过post对象进行。 这意味着我需要获取聚合根的id和聚合实体的id作为HTTP delete请求的参数 这意味着我需要获取聚合根的id和聚合实体的id作

我不熟悉DDD设计概念,但我想在阅读相关文章时澄清一些事情。Jimmy Boggard使用以下词语: “聚合边界之外的任何内容都不能包含对内部任何内容的引用,根实体除外。”,“只有聚合根可以通过数据库查询直接获得。其他所有内容都必须通过遍历完成。”

假设我想删除一篇文章的评论。在这里,据我所知,post是root。因此,所有与评审的沟通都应该通过post对象进行。 这意味着我需要获取聚合根的id和聚合实体的id作为HTTP delete请求的参数

这意味着我需要获取聚合根的id和聚合实体的id作为HTTP delete请求的参数

简短回答:是的

更长的回答:为了与从属于聚合根的实体交互,需要路由到根(因此需要Id),并且需要将指定目标实体所需的信息作为参数传递给根

不支持请求主体;因此,参数必须是源服务器可以单独从URI恢复的(或者参数被编码到URI中,或者URI允许您访问知道参数是什么的资源)


注意:
Review
是否应该是
Post
聚合中的从属实体并不明显。聚合设计是关于行为而不是关系的。如果建模<代码>复习<代码>作为一个单独的集合,从<代码> POST <代码>使你的生活变得更容易,你应该考虑它。

这样做会更实际,但你不一定要这样做。您的RESTAPI不必精确地反映您的域模型——HTTP和DDD是两种非常不同的范式,它们有自己的约束和世界观

一个有效的替代方法是仅根据
评论ID
检索正确的
帖子
,并要求该帖子删除评论

DELETE /reviews/1234

...
post = postRepository.getPostForReview(reviewId);
post.deleteReview(reviewId);
虽然我同意在这个特殊的例子中,
DELETE/posts/1234/reviews/5678
可能是一个更好的URI