Apakah ada alasan yang baik untuk meletakkan kode yang sama di kedua blok coba AND catch?

13

Dalam file app/code/core/Mage/Adminhtml/Block/Widget/Grid/Column/Renderer/Datetime.php:, dalam render()metode, sepertinya kode yang sama persis dijalankan di blok coba dan tangkap. Pengecualian tidak ditangani sama sekali. Saya ingin tahu apa alasannya (jika ada) untuk menulis kode seperti ini:

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);
}
David Angel
sumber

Jawaban:

3

Bagi saya tidak ada alasan untuk kode seperti itu dalam kasus khusus itu.

Saya bisa memikirkan alasan di mana Anda bisa melakukan itu ketika berurusan dengan permintaan waktu habis.

Sebagai contoh:

  • beberapa kode membutuhkan waktu yang lama untuk menyelesaikannya
  • Anda mencoba melakukan sesuatu yang tergantung pada hasil kode ini
  • karena kode belum dilakukan, maka pengecualian dilemparkan
  • di blok tangkapan Anda, Anda menambahkan beberapa waktu tunggu ( sleep) dan coba lagi

Tetapi bagaimanapun juga ini adalah desain yang sangat buruk dan buruk dalam hal kinerja karena pengecualian memakan sumber daya.

The catchblok hanya harus digunakan untuk penanganan eksepsi dan rollback hal yang belum selesai (misalnya database yang rollback)

Saya tidak memeriksa keseluruhan metode untuk kode yang Anda sebutkan, tetapi setiap kali saya melihat kode seperti itu, saya cenderung berpikir bahwa kode tersebut harus di-refactored dan / atau berbicara dengan programmer diperlukan untuk memahami alasan di balik kode ini sebagai kode seperti itu. dapat menyembunyikan masalah yang lebih besar dalam kode.

Raphael di Digital Pianism
sumber