Kapan mulai menulis Penanganan Eksepsi, Logging


13

Kapan Anda mulai menulis Kode Penanganan Pengecualian Anda? Kapan Anda mulai menulis Laporan Pencatatan.

Untuk keperluan menguraikan pertanyaan ini, mari kita asumsikan bahwa kita berada di platform .NET dengan log4net logging tetapi merasa bebas untuk menjawab dengan cara yang umum.

Solusi: Proyek Formulir Windows. Proyek: UI, BusinessRules, DataHandlers

Jadi, apakah Anda ingin menulis DataHandlers Anda yang melakukan manipulasi Data Anda seperti Buat, Baca, Perbarui, Hapus dulu.

Kemudian ikuti dengan Aturan Bisnis Anda

Dan kemudian UI Anda atau permutasi lainnya di atas.

Uji Aplikasi Anda untuk Fungsionalitas.

Dan kemudian mulai menulis Kode Penanganan Pengecualian Anda dan akhirnya kode Penebangan Anda?

Kapan waktu yang tepat untuk mulai menulis kode Penanganan Pengecualian Anda?

PS: Dalam buku Clean Code , mereka mengatakan Tulis blok try-catch-akhirnya Anda terlebih dahulu. Itu, mendorong saya untuk mengajukan pertanyaan ini.

Jawaban:


15

Anda menulis kode penanganan pengecualian saat Anda menulis hal yang memanggil sesuatu yang dapat menyebabkan pengecualian.

Misalnya, saat Anda menulis sesuatu yang mengirim data ke jaringan, Anda juga harus menulis kode yang menangani waktu habis koneksi. Pengecualian ini secara langsung relevan dengan apa yang Anda lakukan, dan pekerjaan itu segar dalam pikiran Anda.

Di sisi lain, jika Anda menulis parser yang menimbulkan pengecualian ketika bertemu unit data protokol yang salah, maka Anda tidak bisa menulis kode penanganan pengecualian untuk pengecualian yang dihasilkan parser . (Tapi tentu saja Anda sedang menulis tes untuk menunjukkan bagaimana dan kapan dan mengapa pengurai memunculkan pengecualian!)

Alasan di balik saran untuk menulis try-catch-akhirnya yang pertama adalah dua kali lipat: akhirnya adalah untuk membersihkan sumber daya yang dibuat / dikonsumsi fungsi, dan menulis tangkapan adalah pengingat yang bagus bahwa fungsi yang Anda panggil mungkin gagal, dan Anda perlu menangani (jika perlu) kegagalan tersebut.

Saya cenderung menambahkan pencatatan setelah fakta. Saya tidak yakin apakah itu bijaksana, tetapi itu hanya apa yang berhasil bagi saya. Ketika saya mulai menjalankan tes penerimaan dan sejenisnya, dan mulai memukul masalah, maka saya menambahkan logging sehingga saya dapat melacak kesalahan. (Dan kemudian saya meninggalkan login.)


+1 untuk alasan di balik penulisan try-catch-akhirnya lebih dulu
Kanini

1
Dalam C ++, tidak ada akhirnya , dan untuk alasan yang sangat bagus. RAII jauh lebih unggul.
David Thornley

3

Dalam pengalaman saya, jika Anda tidak menulis kode dengan penanganan kesalahan dan pencatatan yang sesuai sejak awal, itu tidak akan selesai karena tekanan waktu. Upaya pengembangan paling sukses yang telah saya lakukan dimulai dengan waktu yang dihabiskan untuk menentukan struktur aplikasi dasar, termasuk standar pengkodean, bagaimana kesalahan akan ditangani, logging, arsitektur dasar dan alat uji.

Jika tidak, Anda akan menemukan bahwa Anda memiliki tugas untuk versi 2.0 seperti "Meningkatkan penanganan kesalahan" dan "membuat sistem logging". Ini akan dipotong mendukung fitur baru, dan karena Anda memiliki "terlalu banyak yang harus dilakukan", memperbaiki semua bug dalam kasus kesalahan yang tidak Anda pikirkan. (Yang butuh selamanya, karena Anda tidak memiliki sistem logging.


1

Tergantung pada apa yang Anda lakukan

untuk pengecualian:

Jika Anda menulis sesuatu yang cenderung memiliki kesalahan atau sesuatu di mana ada poin tingkat atas yang baik untuk membiarkan pengecualian muncul untuk menuliskannya saat Anda pergi.

Jika Anda menulis sesuatu yang membutuhkan kinerja dan memiliki kemungkinan kesalahan yang rendah, maka tidak ada tempat yang berarti untuk meletakkan penangan kesalahan, tulis penangan kesalahan di mana pengujian membuktikan Anda membutuhkannya.

Dalam kedua kasus tersebut, jika Anda tidak memiliki sesuatu yang berguna untuk dilakukan dengan kesalahan, pertimbangkan untuk membiarkannya muncul (tidak ada penangan)

untuk logging:

Jika Anda membutuhkan jejak audit Anda harus menulis logging terlebih dahulu. Jika Anda membiarkan kesalahan menggelembung sampai ke puncak, Anda perlu menyediakan beberapa pencatatan di sana juga agar log dapat ditangkap.

Selain dari kasus-kasus itu saya biasanya hanya menambahkan logging di tempat-tempat di mana pengujian / penggunaan membuktikan itu perlu dan saya biasanya membuat opsi untuk mengkonfigurasinya setelah saya selesai dengan itu.


Terima kasih atas jawaban terinci. Sehubungan dengan pencatatan, mengapa Anda memulai dengan pencatatan terlebih dahulu jika saya memerlukan Audit Trail. Mengapa saya tidak dapat menulisnya setelah saya selesai dengan aspek Fungsionalitasnya? Adakah alasan khusus?
Kanini

Bagi saya lebih mudah untuk menulis pendataan saat Anda menulis fungsi yang perlu diaudit, jadi untuk melakukan itu saya memerlukan fungsi pendataan dasar sebelum saya menulis apa pun yang akan menyebabkan saya membutuhkannya. Jika saya tidak menulis audit saat saya pergi saya akan khawatir bahwa saya akan kehilangan sesuatu.
Bill

1

Anda dapat menerapkan audit dan penanganan pengecualian sebagai layanan. Pencatatan audit tingkat aplikasi memerlukan data status tentang setiap transaksi bisnis. Kemampuan untuk memonitor aplikasi dalam konteks bisnis atau transaksional memerlukan antarmuka pemantauan dalam layanan untuk mengirim pesan yang merinci status transaksi yang spesifik untuk permintaan layanan. Ini mengharuskan setiap layanan untuk mengirim pesan status pada langkah-langkah penting dalam transaksi bisnis. Anda kemudian dapat membangun penampil waktu-nyata untuk mengkorelasikan pesan status (berdasarkan semantik pesan - misalnya ID transaksi) dengan layanan dalam aplikasi gabungan. Ini memberikan pandangan ujung ke ujung dari transaksi bisnis untuk manajemen SLA, penelusuran kesalahan dan penentuan masalah.

Layanan audit kemudian dapat diimplementasikan sebagai mesin negara yang dapat mengkonsumsi dan merekam pesan berdasarkan kriteria yang ditentukan dalam konfigurasinya. Penangan pengecualian umum juga dapat menggunakan layanan audit untuk mendukung pandangan terpusat masalah yang terjadi dalam SOA perusahaan - untuk mendukung pemantauan berbasis pengecualian. Segala kondisi yang tidak boleh terjadi dalam solusi diinstrumentasi untuk mengirim pesan pengecualian ke penangan pengecualian.


1

Tuliskan saat Anda membutuhkannya, tetapi rancang untuk dimasukkannya dari awal.

Dengan kata lain: buat jadi ada cara untuk menangani kapabilitas logging tersebut, dan tambahkan fungsionalitas mur dan baut yang sebenarnya (pesan apa yang dicatatnya) nanti saat diperlukan. Pada pengecualian - tambahkan tangkapan (dan akhirnya jika Anda punya itu) sebelum Anda menulis lemparan. Itu akan membantu untuk tidak melupakan satu dan menyelamatkan diri sendiri iterasi atau paling buruk bug / crash.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.