Ngoding itu gotong royong

Photo by Annie Spratt on Unsplash

Ketika ngoding, kita harus peduli dengan seberapa mudah kode tersebut dipahami. Bukan hanya dipahami oleh orang lain, tetapi juga diri kita 2 bulan kemudian (misalnya).

Kode yang mudah dipahami akan memudahkan untuk dikembangkan, untuk diubah, untuk dioptimasi, dst.

Perubahan adalah realita bisnis yang sudah pasti. Bagaimana kita bisa lebih mudah beradaptasi terhadap perubahan bila kode yang kita kelola susah dipahami?

Dalam hal ini, ada dua hal yang menurut saya sangat membantu: penamaan dan konsistensi.

Penamaan

Salah satu hal yang sangat saya suka dari Domain Driven Development adalah konsep ubiquituous language-nya. Kita harus memahami dan menggunakan bahasa yang dipakai oleh domain expert.

Kita memakainya ketika berbicara dengan domain expert, ketika berbicara dengan developer lainnya, di dokumentasi requirements, dan tidak kalah penting, di kode.

Dengan menggunakan konsep penamaan seperti di atas, kode yang dibuat pun semakin mudah dipahami. Peluang ambiguitas makna semakin berkurang.

Minimnya ambiguitas makna ini penting. Kode yang mudah dipahami tidak mengagetkan penggunanya. Bila sebuah kode berkata simpan, maka dia hanya akan menyimpan. Tidak kurang dan tidak lebih.

Bila codebase yang kita kelola tidak sering memberi kejutan negatif, maka kita bisa memudahkan developer lain dalam mengelolanya.

Konsistensi

Codebase yang konsisten memudahkan kita dalam:

  • Mencari kelas / modul
  • Mengetahui dimana suatu tanggung jawab diterapkan
  • Transfer pengetahuan

Pada saat ini, saya cenderung pada pendapat lebih baik memecah tanggung jawab pada objek-objek yang spesifik. Alhasil, jumlah objek yang dibuat menjadi lebih banyak.

Bila kode konsisten, maka objek-objek di atas akan lebih mudah dicari.

Misalnya, bila ingin mengetahui logika bisnis untuk suatu skenario, maka cari saja di objek Aggregate yang sesuai dengan domainnya. Logika bisnis jangan ditaruh di objek selain Aggregate.


Dari pengalaman saya yang masih sedikit, dua hal di atas lah yang sangat membantu dalam pengelolaan codebase.

Ada teknik-teknik lain yang juga membantu. Semisal TDD, pemahaman akan arsitektur, dsb. Namun, hal ini tidak semendasar dua hal di atas.

Sebagai contoh, kita bisa saja menerapkan TDD untuk memudahkan perubahan. Tetapi bagaimana bila TDD kita susah dipahami?

Kalau pembaca bagaimana? Menurut Anda apa yang lebih memudahkan pengelolaan kode?