0

我有一个关于在 Axon 中映射 RESTful API 和聚合/实体的问题。

假设我们在电影领域,从封装在微服务中的电影上下文开始。我们有一个电影实体(聚合)和一堆相关的命令和事件。

@Aggregate
class Movie {

  @AggregateIdentifier
  private MovieId movieId;

  // omitted handlers, getters and setters

}

相关的 URL 可能看起来像/movies/<movieId>

现在我想介绍一个用于电影评分的新上下文/微服务。电影评级与电影有关,电影不知道它们的存在。但最后我想通过它的 id 代表的电影来解决收视率问题。URL 可能如下所示/movies/<movieId>/ratings

所以实体可能看起来像这样:

@Aggregate
class MovieRatings {

  @AggregateIdentifier
  private MovieRatingsId movieRatingsId;

  // the related movie
  private MovieId movieId;

  // a list of movie related ratings
  private List<Rating> movieRatings;

  // omitted handlers, getters and setters
}

问题是,在这里创建这样的聚合有意义吗?如果不是,那么基于 cqrs 的替代方案会是什么样子?如果是的话,如果我只知道电影标识符,我如何通过在我的控制器中触发的命令(例如 AddRating)来解决它?

4

1 回答 1

0

感谢@Zeljko Vujaklija 和@Mzzl 的提示!我调整了 MovieRating 聚合:

@Aggregate
class MovieRating {

  @AggregateIdentifier
  private MovieRatingsId movieRatingsId;

  // the related movie
  private MovieId movieId;

  private Rating rating;

  // omitted handlers, getters and setters
}

并且只需使用movieId 来查询电影相关的收视率。一个简单POST的 to movies/<movieId>/ratingswith the rating in body 创建一个电影评级并GET检索相关数据。甚至可以使用编辑评级/movies/<movieId>ratings/<ratingId>

于 2019-04-29T08:58:35.993 回答