我有两项服务: 一个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);
}
我怀疑我需要在这些服务之外再增加一层以帮助解决问题。最好的做法是什么?
答案 0 :(得分:0)
我最终要做的是创建了一个结帐服务,该服务协调了orderService和TransactionService之间的通信。例如,不具有此功能签名:
$this->orderService->updateOrderStatusUsingTransaction($order, $event->transaction);
我做了这样的事情:
$this->orderService->updateOrderStatus($order, $status);
结帐服务正在调用该函数。但在此之前,它将从事务中提取状态。然后调用该函数。这样订购服务就不必知道该交易。