Jumat, 28 Januari 2011

Try Catch

Ketika membangun sebuah aplikasi. Tentunya kita menggunakan try-catch untuk menangani errornya.

Jika kita menaruh "try catch" di dalam setiap method. Apakah itu efektif??

Akan sangat rumit menggunakan try catch pada setiap method. Misalkan kita memiliki 100 method, berarti ada 100 try catch pada baris program kita.
Kebanyakan try catch berarti akan semakin banyak jumlah baris program, sehingga ketika program dieksekusi akan membuat program menjadi lambat.
Dari sisi lain, kode programnya kelihatan jadi berantakan (cluttered).
Sebelum memutuskan untuk menaruh "try catch" di setiap method, ada baiknya mempertimbangkan dulu dari sisi application design.
Bayangkan exception itu seperti keluhan dari customer yang menghubungi call center.
  • Jika operator call center bisa menangani masalah yang dikemukakan, cukup sampai di situ ==> gunakan catch exception
  • Jika operator call center tidak bisa menangani masalah, harus dilemparkan ke manager ==> gunakan throw exception
  • Jika operator call center bisa menangani sebagian masalah ==> gunakan catch dan kemudian throw exception yang sama atau lainnya


Solusi 1:
Untuk mengurangi jumlah try catch, bisa saja exceptionnya dilempar ke method yang memanggil method yang menghasilkan exception tersebut, jadi penanggulangannya bisa di satu method tertentu saja.
Contoh:
public String testMethod(Integer input) throws Exception {
..........
}
Pada deklarasi methodnya bisa diberikan throws Exception, sehingga try-catch nya di method yang memanggil testMethod

Solusi 2:

Mendefinisikan Exception sendiri di masing-masing method.
Contoh:

public MethodAException extends Exception {
}
public MethodBException extends Exception {
}
publis void methodA(){
throw new MethodAException
}
publis void methodB(){
throw new MethodBException
}
public void call(){
try{
methodA();
methodB();
catch( MethodAException a){
//log for method A
}catch( MethodBException a){
//log for mthhod B
}

Solusi 3:

Try catch nya dipasang di main loop.
Untuk aplikasi desktop => main loopnya ada di method public static void main.
Untuk aplikasi web => main loop ada di appserver.
Biasanya semua exception akan masuk ke log appservernya. Try-catch nya sesuai kebutuhan saja.

2 komentar:

  1. main2 ke blog nya ka ismi
    izin nge-link yaaa...

    BalasHapus
  2. Makasih ami atas kunjungannya..
    Dengan senang hati kalo mau di link di blognya ami
    :)

    BalasHapus