05.09

Perhatikan gambar di atas. Terdapat dua buah lemari, lemari untuk peralatan makan dan lemari untuk peralatan kendaraan. Anda diminta untuk mengambil piring. Secara intuisi, anda akan langsung membuka lemari peralatan makan. Tapi apa yang terjadi ketika anda membuka lemari yang anda buka ternyata isinya sangat berantakan. Piring, mangkok, garpu, sendok, pisau dan lain sebagainya tercampur baur. Yang pasti, anda akan kesulitan dalam mengambil piring-piring itu.
Sekarang, perhatikan gambar berikut

Lagi-lagi anda diminta untuk mengambil piring. Apa yang anda lakukan? anda akan langsung membuka lemari dengan tulisan piring, dan langsung mengambil isinya.
Bila anda ditanya, mana yang lebih mudah? apakah dengan susunan lemari gambar pertama atau dengan susunan lemari gambar kedua? Anda pasti menjawab : susunan lemari gambar kedua.
Mengapa susunan lemari gambar kedua lebih memudahkan kita untuk mengambil isinya? hal itu pasti karena isi dari tiap lemari tidak tercampur baur antara satu hal dengan hal lainnya. Mungkin itu adalah analogi yang mirip dalam pembuatan class.
Beberapa tahun saya sebagai developer dengan beberapa team pernah mengalami kebiasaan team yang berbeda-beda. Tapi yang paling sering saya alami adalah team yang relatif malas untuk memecah class yang besar. Biasanya class-class besar itu paling sering terjadi di layer manager / service. Semua bisnis logic masuk pada layer ini. Parahnya adalah sebuah class manager / service bisa memiliki ratusan (bahkan mungkin ribuan) baris code. Ini sudah pasti menyalahi aturan SRP (Single Responsibility Principle). Sekarang banyangkan bila ada kebutuhan untuk merubah bisnis proses di salah satu class manager. susah. susah. Ini sama seperti kita harus mengambil piring pada gambar pertama. Banyak kesemrawutan dalam class.
Saya mulai berpikir mengapa developer sering malas untuk memecah sebuah class agar mengikuti SRP. Salah satu jawaban yang saya miliki adalah mungkin developer takut dengan jumlah class kecil yang banyak daripada class besar yang sedikit. Mereka mungkin beranggapan bahwa untuk mengetahui bagaimana sesuatu bekerja harus melihat pada banyak class. Mereka lebih memilih untuk membuka sebuah lemari yang semrawut untuk mengambil piring, sendok dan garpu daripada harus membuka tiga buah lemari untuk mengambil piring, sendok, dan garpu.
Mungkin bila kita makan di warteg, kita akan terbiasa untuk melihat mereka mencapur tempat untuk piring, sendok dan piring. Tapi bila kita makan di restoran besar, kita akan melihat mereka selalu memisah-misahkan tempat antara piring, sendok ataupun piring. Lebih rapi. Lebih terorganisir. Dan Lebih cepat untuk mengaksesnya.
Sekarang pilihannya, kita akan memilih metode yang sering dilakukan oleh warteg, ataukah memilih metode yang sering dilakukan restoran?????

kajian.net