我在航空预订应用程序上使用 CQRS。一个用例是帮助客户取消他们的票。但在实际取消之前,客户想知道罚款。
罚款是根据空气规则计算的。我们的一些提供商可以通过暴露 Web 服务来计算惩罚,而其他提供商则不会。(他们发表了一些解释算法的论文)。所以我定义了一个域服务
public interface AirTicketService {
//ticket demand method
MonetaryAmount penalty(String ticketNumber);
void cancel(String ticketNumber, MonetaryAmount penalty);
}
我的问题是哪一方(命令/查询)负责调用此域服务并在 CQRS 样式应用程序中返回结果?
我想用一个命令:CalculatePenlatyCommand,这样,很容易重用领域模型,但是有点奇怪,因为这个命令不修改状态。
或者如果这是一个查询,我应该检索票的读取模型吗?但是命令端和查询端都需要相同的 DomainService,这也很奇怪。
域派生是查询吗?