У меня есть две услуги:
OrderService, который имеет удобные методы для работы с заказами.
И у меня есть TransactionService, у которого есть удобные методы для работы с платежными транзакциями.
Я хочу обновить статус заказов, когда транзакция была оплачена. Но я не уверен, где это сделать. Я думаю, что это не является обязанностью двух служб.
Я могу сделать что-то вроде этого:
$this->orderService->updateOrderStatusUsingTransaction($order, $event->transaction);
Но тогда я делаю OrderService, также ответственный за обновление Транзакции. Пока я только хочу, чтобы он отвечал за заказы.
$this->transactionService->updateOrderStatusUsingTransaction($order, $event->transaction);
Но тогда я возлагаю на TransactionService также ответственность за обновление Транзакции. Пока я только хочу, чтобы он отвечал за транзакции.
/**
* 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);
}
Я подозреваю, что мне нужен дополнительный слой за пределами этих служб, чтобы помочь мне решить проблему. Каковы будут некоторые лучшие практики?