具有OrderService和TransactionService时应在哪里更新“交易”模型

时间:2019-01-17 12:34:25

标签: php design-patterns

我有两项服务: 一个OrderService,它具有处理订单的便捷方法。 而且我有一个TransactionService,其中提供了用于付款交易的便捷方法。

支付交易后,我想更新订单状态。但是我不确定该在哪里做。我认为,这两种服务都不是责任。

我可以做这样的事情:

$this->orderService->updateOrderStatusUsingTransaction($order, $event->transaction);

但是随后我使orderService也负责更新交易。虽然我只希望它负责订单。

$this->transactionService->updateOrderStatusUsingTransaction($order, $event->transaction);

但是后来我使transactionService也负责更新Transaction。虽然我只希望它负责交易。

/**
 * Handle the event.
 *
 * @param TransactionChanged $event
 * @return void
 */
public function handle(TransactionChanged $event) {
    /** @var Order $order */
    $order = $event->transaction->order()->first();
    /** @var User $customer */
    $customer = $order->customer()->first();

    $this->orderService->updateOrderStatusUsingTransaction($order, $event->transaction);
    $this->orderMailService->mailCustomerAboutCurrentOrderStatus($order, $customer);
}

我怀疑我需要在这些服务之外再增加一层以帮助解决问题。最好的做法是什么?

1 个答案:

答案 0 :(得分:0)

我最终要做的是创建了一个结帐服务,该服务协调了orderService和TransactionService之间的通信。例如,不具有此功能签名: $this->orderService->updateOrderStatusUsingTransaction($order, $event->transaction); 我做了这样的事情: $this->orderService->updateOrderStatus($order, $status);

结帐服务正在调用该函数。但在此之前,它将从事务中提取状态。然后调用该函数。这样订购服务就不必知道该交易。