如何在不知道标识符的情况下向聚合发送命令?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在不知道标识符的情况下向聚合发送命令?相关的知识,希望对你有一定的参考价值。

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

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

@Aggregate
class Movie {

  @AggregateIdentifier
  private MovieId movieId;

  // omitted handlers, getters and setters

}

相关的网址可能看起来像/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)解决它,例如在我的控制器中,如果我只知道电影标识符?

答案

感谢@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>编辑评级也是可能的。

以上是关于如何在不知道标识符的情况下向聚合发送命令?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不关闭套接字的情况下向主机发送 FIN 标志

如何在不使用移动网络的情况下向自己发送假短信?

如何在不打开 WhatsApp 的情况下向 WhatsApp 群组发送消息?

如何在不使用 Firebase 控制台的情况下向 iOS 设备发送 Firebase 云消息通知?

是否可以在不构建任何应用程序的情况下向 Android 发送推送通知?

我开发了提醒应用程序,因此如何在不使用 firebase 的情况下向用户发送本地通知