如何在不知道标识符的情况下向聚合发送命令?
How to send a command to an aggregate without knowledge about the identifier?
我有一个关于在 Axon 中映射 RESTful API 和 aggregates/entities 的问题。
假设我们在电影领域,并从封装在微服务中的电影上下文开始。我们有一个电影实体(聚合)和一堆相关的命令和事件。
@Aggregate
class Movie {
@AggregateIdentifier
private MovieId movieId;
// omitted handlers, getters and setters
}
相关的 URL 可能看起来像 /movies/<movieId>
现在我想介绍一个新的 context/microservice 电影分级。电影评级与电影有关,而电影不知道它们的存在。但最后我想通过它的 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 来查询电影相关评级。一个简单的 POST
到 movies/<movieId>/ratings
和 body 中的评级创建电影评级和 GET
检索相关数据。
甚至可以使用 /movies/<movieId>ratings/<ratingId>
编辑评分。
我有一个关于在 Axon 中映射 RESTful API 和 aggregates/entities 的问题。
假设我们在电影领域,并从封装在微服务中的电影上下文开始。我们有一个电影实体(聚合)和一堆相关的命令和事件。
@Aggregate
class Movie {
@AggregateIdentifier
private MovieId movieId;
// omitted handlers, getters and setters
}
相关的 URL 可能看起来像 /movies/<movieId>
现在我想介绍一个新的 context/microservice 电影分级。电影评级与电影有关,而电影不知道它们的存在。但最后我想通过它的 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 来查询电影相关评级。一个简单的 POST
到 movies/<movieId>/ratings
和 body 中的评级创建电影评级和 GET
检索相关数据。
甚至可以使用 /movies/<movieId>ratings/<ratingId>
编辑评分。