Naming Things #1: Avoid Unnecessary Context
Programmer yang mulai beranjak “dewasa” pasti sangat familiar dengan quote berikut ini:
There are only two hard things in Computer Science: cache invalidation and naming things. (Phil Karlton)
Salah satu kesalahan yang sering saya temui ketika melakukan code review adalah terkait penamaan method yang terlalu panjang karena ada penambahan konteks yang tidak perlu.
Sebagai contoh, terdapatlah sebuah kelas UserRepository
yang tanggung jawabnya adalah menyediakan berbagai macam method untuk berinteraksi dengan data User
di database.
class UserRepository { // mendapatkan semua list user
public function getListUser()
{ }}
Dengan nama kelasUserRepository
, secara eksplisit sudah mengatakan ini kelas repository untuk User
, jadi method-method yang ada di dalamnya sudah pasti berhubungan dengan User
. Tidak perlu lagi menambahkan prefiks User
di method-nya.
Mengganti getListUser()
dengan getList()
, get()
, atau mungkin all()
bisa lebih meningkatkan readability.
Pun bila nanti ada method untuk menambahkan data User
, cukup diberi namacreate()
saja, tidak perlu createUser()
. Dulu ketika baru belajar OOP, contoh yang sering digunakan adalah kelas Person
dengan method yang dimiliki antara laingetName()
dan getAge()
, bukan getPersonName()
dan getPersonAge()
.
Tentu saja ini harus dibarengi dengan penamaan variable yang cukup jelas ketika menginstansiasi kelas repository tersebut.
// bad
$repo = new UserRepository();
$users = $repo->all();// Which repo?// good
$userRepository = new UserRepository();
$users = $userRepository->all();// clear, it is about user repository
Semoga bermanfaat.