这是一段代码,我想知道是否应该对其进行重构以使其更符合 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 构建的。
提前致谢。