jump to navigation

Exception Design (Bagian 08) – Tester-Doer Pattern 24 Juni 2008

Posted by firstyuyu in Exception Design.
trackback

Sebagaimana telah kita bahas pada artikel Performa Exception Dibandingkan Return Value, exception bisa membawa dampak yang buruk bagi performa aplikasi jika tidak didesain dengan benar. Di akhir artikel tersebut disebutkan bahwa salah satu cara untuk mengurangi dampak negatif ini adalah dengan menggunakan Tester-Doer Pattern. Berikut ini akan kita bahas tentang apa itu Tester-Doer Pattern.

Ada kalanya performa dari sebuah member yang melontarkan exception bisa ditingkatkan dengan memecah member tersebut menjadi dua. Mari kita lihat pada method Add dari interface
ICollection<T>.

ICollection<int> numbers = …

numbers.Add(i);

Method Add akan melontarkan exception jika collection bersifat read-only. Ini bisa menjadi masalah dari sisi performa pada skenario dimana pemanggilan method Add lebih sering mengalami kegagalan. Salah satu cara untuk mengurangi masalah performa ini adalah dengan melakukan pengetesan terlebih dahulu apakah collection yang kita gunakan tersebut bersifat writeable sebelum kita menambahkan nilai ke dalamnya.

ICollection<int> numbers = …

if(!numbers.IsReadOnly){

    numbers.Add(i);

}

Member yang melakukan pengetesan (properti IsReadOnly pada contoh di atas) biasa disebut Tester. Sementara member yang menjalankan operasi yang potensial menyebabkan terjadinya exception (method Add pada contoh di atas) biasa disebut Doer.

Pertimbangkan:
menggunakan Tester-Doer Pattern untuk member yang potensial melontarkan exception pada skenario utama untuk meminimalkan masalah performa berkaitan dengan exception.

Jangan:
gunakan pattern ini jika Tester lebih “mahal” daripada Doer. Lebih “mahal” di sini bisa berarti memakan waktu lebih banyak, membutuhkan resource yang lebih besar, dll.

Catatan Penting: Walaupun pattern ini cukup bermanfaat untuk meminimalkan dampak penurunan performa yang diakibatkan oleh exception, namun kita juga harus menggunakan pattern ini dengan sangat hati-hati. Hal ini karena Tester-Doer Pattern sangat riskan ketika dieksekusi dalam lingkungan multi threading. Sangat mungkin ketika thread A melakukan pengetesan, menghasilkan nilai true. Kemudian tepat setelah itu, terdapat thread lain yang memodifikasi state dari obyek yang bersangkutan yang akan merubah hasil pengetesan. Hal ini menyebabkan terlontarnya exception di thread A yang tidak akan tertangani karena thread A tidak mengharapkan terjadinya exception.

 

Iklan

Komentar»

1. List Marketing - 1 April 2017

List Marketing

Exception Design (Bagian 08) – Tester-Doer Pattern | Yudi Maryanto Blog


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: