在DDD设计中,如何通过AR传递域服务

时间:2018-09-24 01:45:19

标签: oop domain-driven-design

我的汇总如下:

  • 结帐(根)
  • 需求:CouponRequirement,AnotherRequirement,YetAnotherRequirement
  • 优惠券

Checkout有很多Requirements,需要完成这些Checkout才能完成Requirement。 每个fulfill(data)都有一个CouponRequirement方法来负责执行过程。

其中一个要求是CouponRepository,当满足该要求时,需要确保有特定优惠券的库存并保留。 为此,我需要访问CouponServicefunction 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()

1 个答案:

答案 0 :(得分:0)

  

我如何调整设计以适应这种依赖性?

通常的答案是,应用程序将执行其工作所需的任何功能传递给聚合根。

在您的特定情况下,这看起来像是CouponService的实例作为fullfillRequirement方法的参数传递给Checkout聚合根的情况。

  

也许我只是不能有一个通用的complementRequirement,而每种具体类型都需要一个?

我希望情况确实如此;毕竟,您已经确定了一种路径不同的用例。