jump to navigation

Exception Design (Bagian 06) – Membungkus Exception 15 Juni 2008

Posted by firstyuyu in Exception Design.
trackback

Suatu saat, exception yang berasal dari layer yang lebih rendah mungkin tidak akan punya makna ketika muncul di layer yang lebih tinggi. Pada kasus seperti ini, akan lebih baik jika exception yang berasal dari layer yang lebih rendah ini kita bungkus di dalam sebuah exception baru yang lebih mempunyai arti bagi developer di layer yang lebih tinggi.

Sebagai contoh, FileNotFoundException tidak akan mempunyai arti sama sekali jika muncul dari API untuk transaction managaement. Developer yang menggunakan API ini bahkan mungkin sama sekali tidak tahu jika API untuk transaction management implementasinya melibatkan operasi file.

Selain itu, pesan yang dibawa suatu exception juga harus kita perhatikan. Sering kali, pesan exception ini menjelaskan kesalahan yang terjadi menggunakan konsep yang ada pada layer dimana ia berada. Ketika exception dari layer yang lebih rendah kita biarkan muncul pada layer yang lebih tinggi, maka bisa saja pesan exception yang dibawa menjadi tidak bermakna ketika dibaca pada konteks layer yang lebih tinggi. Karena itu, exception yang menjadi pembungkusnya harus membuat pesan exception baru yang lebih bermaknya ketika dibaca dari sudut pandang konsep di mana ia akan muncul.

Pembungkusan exception juga berguna ketika kita ingin menginformasikan terjadinya kesalahan dimana informasi tentang tipe exception yang terjadi tidaklah terlalu penting. Sebagai contoh, jika sebuah exception terjadi pada konstruktor static, maka tipe data tersebut tidak akan bisa digunakan lagi di dalam AppDomain saat ini. Di sini, informasi tentang telah terjadinya exception di konstruktor static jauh lebih penting daripada tipe exception itu sendiri. Karena itulah, CLR akan selalu membungkus exception yang terjadi di konstruktor static dengan TypeInisializationException.

Pertimbangkan:
untuk membungkus exception yang spesifik yang muncul di layer yang lebih rendah jika exception ini tidak mempunyai makna pada konteks operasi yang sedang dilakukan di layer yang lebih tinggi.

try

{

    // baca file yang digunakan

    // untuk implementasi transaction

}

catch (FileNotFoundException ex)

{

    throw new TransactionFileMissingException(“…”, ex);

}

Pembungkusan exception seperti ini seharusnya hanya digunakan jika benar-benar diperlukan. Hal ini karena membungkus exception akan memperumit ketika kita melakukan debugging.

Hindari:
menangkap dan membungkus exception yang tidak spesifik. Hal ini merupakan bentuk lain dari menelan exception.

Namun ada pengecualian untuk poin ini, yaitu ketika informasi tentang telah terjadinya exception jauh lebih penting dari tipe exception yang terjadi. Misalnya, CLR akan membungkus semua exception yang terjadi di dalam konstruktor static dengan TypeInisializationException.

Lakukan:
Ketika membungkus exception, jadikan exception aslinya sebagi inner exception.

catch (FileNotFoundException ex)

{

    // jadikan ex sebagai inner exception

    throw new TransactionFileMissingException(“…”, ex);

} 

 

Iklan

Komentar»

No comments yet — be the first.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: