如何解决我如何从轴突框架中的聚合成员访问聚合根状态
假设我有CloudServer Aggregate,其中有cloudService作为其成员。如果用户想要升级他们的cloudService,我需要计算他们是否有足够的余额来进行升级,但是我不知道如何从AggregateMember访问AggregateRoot的余额状态。代码如下所示。
@Aggregate
class CloudServerAggregate() {
@AggregateIdentifier
lateinit var cloudServerId: String
lateinit var balance: BigDecimal
@AggregateMember(eventForwardingMode = ForwardMatchingInstances::class)
var cloudService = mutableListOf<CloudService>()
}
class CloudService(
@EntityId
val serviceId: String
) {
val isActivated: false
@CommandHandler
fun handle(command: UpgradeServiceCommand){
// I need to check the current balance of this cloud server,but I also need to use the state inside this class
// if(balance < command.price) {
// throw IllegalArgumentException("Insufficient balance")
// }
// if(!isActivated){
// throw IllegalArgumentException("Some errors")
// }
}
}
解决方法
没有直接方法可以从聚集成员访问聚集。
由于您要执行的操作取决于聚合根,因此最好将命令处理程序移至聚合本身。
检查余额并相应地升级服务。如果余额通过验证,您甚至可以从聚合根的命令处理程序直接在服务对象上调用“命令处理程序”功能。
,应该有一种扩展 AnnotatedAggregate 的方法。 然后您应该能够使用 getAggregateRoot()(或使用 kotlin 的aggregateRoot),然后使用“as CloudServerAggregate”进行转换。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。