Có một lý do chính đáng để đặt cùng một mã trong cả hai khối thử VÀ bắt không?


13

Trong tệp : app/code/core/Mage/Adminhtml/Block/Widget/Grid/Column/Renderer/Datetime.php, trong render()phương thức, có vẻ như cùng một mã chính xác đang được chạy trong cả khối thử và bắt. Ngoại lệ không được xử lý ở tất cả. Tôi tò mò muốn biết lý do (nếu có) là gì khi viết mã như thế này:

try {
     $data = Mage::app()->getLocale()
         ->date($data, Varien_Date::DATETIME_INTERNAL_FORMAT)->toString($format);
} catch (Exception $e) {
     $data = Mage::app()->getLocale()
         ->date($data, Varien_Date::DATETIME_INTERNAL_FORMAT)->toString($format);
}

Câu trả lời:


3

Đối với tôi không có lý do cho mã như vậy trong trường hợp cụ thể đó.

Tôi có thể nghĩ ra những lý do mà bạn có thể làm điều đó khi giải quyết các yêu cầu hết thời gian.

Ví dụ:

  • một số mã mất một thời gian dài điên rồ để hoàn thành
  • bạn cố gắng làm một cái gì đó phụ thuộc vào kết quả của mã này
  • vì mã chưa được thực hiện nhưng một ngoại lệ được đưa ra
  • trong khối bắt của bạn, bạn thêm thời gian chờ ( sleep) và thử lại

Nhưng trong mọi trường hợp, đây là thiết kế rất tệ và nó là xấu về hiệu suất vì các ngoại lệ là tiêu tốn tài nguyên.

Các catchkhối chỉ phải được sử dụng để xử lý ngoại lệ và rollback thứ chưa hoàn thành (ví dụ như cơ sở dữ liệu rollback)

Tôi đã không kiểm tra toàn bộ phương thức cho mã mà bạn đề cập nhưng bất cứ khi nào tôi thấy mã như vậy tôi có xu hướng nghĩ rằng mã nên được cấu trúc lại và / hoặc nói chuyện với lập trình viên là cần thiết để hiểu lý do đằng sau mã này như mã đó có thể ẩn các vấn đề lớn hơn sâu hơn trong mã.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.