如何在不了解标识符的情况下将命令发送到集合?

时间:2019-04-26 14:14:36

标签: java cqrs axon

我对Axon中RESTful API和聚合/实体的映射有疑问。

假设我们属于电影领域,首先是封装在微服务中的电影上下文。我们有一个Movie实体(聚合)以及一系列相关的命令和事件。

@Aggregate
class Movie {

  @AggregateIdentifier
  private MovieId movieId;

  // omitted handlers, getters and setters

}

相关的URL可能类似于/movies/<movieId>

现在,我想介绍一种用于对电影进行评级的新上下文/微服务。电影分级与电影有关,电影不知道其存在。但是最后,我想通过ID代表的电影来介绍收视率。网址可能像这样/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)来解决该问题在我的控制器中,如果我只知道电影标识符?

1 个答案:

答案 0 :(得分: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即可查询与电影相关的评分。一个简单的POSTmovies/<movieId>/ratings且其评级为正文,会创建电影评级,而GET会检索相关数据。 甚至可以使用/movies/<movieId>ratings/<ratingId>编辑评级。

相关问题