У меня есть следующий агрегат:
- Оформить заказ (root)
- Требование: Требование к купону, Другое требование, Ещё одно требование
- Купон
A Checkout
имеет много Requirements
, которые необходимо выполнить, чтобы завершить Checkout
.Каждый Requirement
имеет метод fulfill(data)
, который отвечает за процесс исполнения.
Одним из этих требований является CouponRequirement
, который при выполнении должен обеспечить наличие запаса для определенного купона изарезервировать это.Чтобы это произошло, мне нужен доступ к CouponRepository
или CouponService
.
Как я могу адаптировать свой дизайн для соответствия этой зависимости?
FulfillRequirementCommand
function handle($cmd) {
$cho = $this->checkoutRepository->get($cmd->checkoutId);
$cho->fulfillRequirement($cmd->requirementType, $cmd->requirementData);
}
Оформить заказ
function fulfillRequirement($reqType, $reqData) {
$req = $this->getRequirement($reqType);
$req->fulfill($reqData);
}
Требование купона
function fulfill($data) {
// check stock / reserve coupon
}