这是一段代码,我想知道是否应该对其进行重构以使其更符合 Clean Code 实践。
这是一个负责退还客户订单的类。
class RefundServiceInvoker {
private $_orders;
public function refundOrder() {
$this->getOrdersFromDB(); //This function gets all orders from DB and sets $_orders
foreach ($this->_orders as $order) {
try {
$order->refund(); //Some lines may throw an exception when refunded due to some business logic (ex. the order was already shipped)
$this->updateOrderStatus('refunded')
} catch (Exception $e) {
$this->logError($e);
$this->sendMailToAdmin();
}
}
}
}
当然,这段代码比我的原始代码高度简化。
我的主要问题是如果$order->refund();
抛出异常,它将被捕获并记录到数据库,然后发送邮件。但是,如果$this->logError($e);
它本身抛出异常怎么办?或者如果邮件服务器关闭并抛出异常怎么办?
如果数据库自己宕机并$this->getOrdersFromDB();
抛出异常怎么办?
我的第一个解决方案是将所有内容包装在一个大文件中try{}catch{}
:
public function refundOrder() {
try {
$this->getOrdersFromDB(); //This function gets all orders from DB and sets $_orders
foreach ($this->_orders as $order) {
$order->refund(); //Some lines may throw an exception when refunded due to some business logic (ex. the order was already shipped)
$this->updateOrderStatus('refunded')
} catch (Exception $e) {
$this->logError($e);
$this->sendMailToAdmin();
}
}
}
但这意味着如果一个订单失败,那么所有订单都会失败!我应该try{}catch{}
为整个功能放置 2 个,为每个订单放置另一个吗?但是在这种情况下,catch 中的函数也可能会抛出一个不会被捕获的异常。
笔记:
该应用程序是使用 Zend 框架 1.11.11 构建的。
提前致谢。