我的汇总如下:
Checkout
有很多Requirements
,需要完成这些Checkout
才能完成Requirement
。
每个fulfill(data)
都有一个CouponRequirement
方法来负责执行过程。
其中一个要求是CouponRepository
,当满足该要求时,需要确保有特定优惠券的库存并保留。
为此,我需要访问CouponService
或function handle($cmd) {
$cho = $this->checkoutRepository->get($cmd->checkoutId);
$cho->fulfillRequirement($cmd->requirementType, $cmd->requirementData);
}
。
我如何调整设计以适应这种依赖性?
FulfillRequirementCommand
function fulfillRequirement($reqType, $reqData) {
$req = $this->getRequirement($reqType);
$req->fulfill($reqData);
}
结帐
function fulfill($data) {
// check stock / reserve coupon
}
CouponRequirement
input()
答案 0 :(得分:0)
我如何调整设计以适应这种依赖性?
通常的答案是,应用程序将执行其工作所需的任何功能传递给聚合根。
在您的特定情况下,这看起来像是CouponService
的实例作为fullfillRequirement方法的参数传递给Checkout聚合根的情况。
也许我只是不能有一个通用的complementRequirement,而每种具体类型都需要一个?
我希望情况确实如此;毕竟,您已经确定了一种路径不同的用例。