Kita sudah berkenalan dengan software design pada modul sebelumnya. Bedanya, di modul ini kita akan sama-sama mempelajari beberapa prinsip design. Tapi sebelum lanjut, yuk kita pahami dulu apa itu Software Design Principle. 

Software Design Principle merupakan sebuah pedoman yang dapat kita gunakan untuk menghindari design yang buruk saat mengembangkan sebuah perangkat lunak. Menurut Robert C. Martin, terdapat 3 (tiga) karakteristik penting dari design yang buruk yang perlu kita perhatikan dan sebaiknya dihindari.

Mari kita bahas satu-satu ketiga pedoman tersebut.

Rigidity 
Dimulai dari rigidity atau kekakuan. Rigidity adalah kondisi suatu sistem yang sulit diubah, bahkan untuk perubahan yang paling sederhana [1]. Saat kita ingin melakukan perubahan, perubahan tersebut menyebabkan ketergantungan untuk mengubah item lain di dalam suatu modul. Alhasil, perubahan yang seharusnya dapat dilakukan dalam waktu yang singkat,  malah sebaliknya. Belum lagi dampaknya pada modul-modul lain yang saling berkaitan.

Fragility 
Selanjutnya adalah fragility. Fragility (kerapuhan) masih memiliki keterkaitan dengan rigidity. Fragility adalah kecenderungan perangkat lunak yang salah di beberapa bagian setiap kali melakukan perubahan [1]. Seringkali kesalahan terjadi di area yang tidak memiliki hubungan konseptual dengan area yang diubah. Sehingga jika melakukan perbaikan, kadang takut timbul kesalahan dengan cara yang tidak terduga. Ketika fragility ada di dalam suatu perangkat lunak, kemungkinan kesalahan akan meningkat seiring berjalannya waktu. Perangkat lunak semacam itu tak hanya sulit dipelihara, bahkan sulit juga dipertahankan. Saat melakukan perbaikan, alih-alih memperbaiki kesalahan yang ada, sebuah sistem akan menjadi lebih buruk dan menimbulkan lebih banyak masalah.

Immobility 
Terakhir yang harus kita perhatikan dan hindari adalah Imobilitas. Yaitu sebuah ketidakmampuan untuk menggunakan kembali perangkat lunak dari proyek lain atau bagian-bagian dari proyek yang sama [1]. Seorang engineer tentu akan mengalami kondisi di mana ia membutuhkan modul atau sistem yang sebelumnya sudah pernah ditulis atau dibuat oleh engineer lain. Namun, sering juga terjadi bahwa modul yang dibutuhkan tersebut memiliki terlalu banyak bobot yang bergantung padanya. Setelah mencoba untuk memisahkan, para engineer menemukan bahwa pekerjaan dan risiko yang diperlukan untuk memisahkan bagian yang diinginkan (dari bagian yang tidak diinginkan), terlalu besar untuk ditoleransi. Sehingga alih-alih menulis ulang (re-write), sang engineer akan menggunakannya kembali untuk project lain.


Dari penjelasan beberapa pedoman di atas, kita dapat mengetahui lebih dalam mengenai perbedaan antara architecture dan design pada perangkat lunak. Selain itu, telah dijelaskan pula tentang bagaimana kita mendefinisikan sebuah design yang buruk dan perlu kita dihindari.

Pada modul selanjutnya kita akan mempelajari  tentang prinsip SOLID, baik itu definisi, penjelasan dan contoh studi kasus kapan kita membutuhkannya. Yuk lanjut!

