Suatu fungsi harus memiliki tanggung jawab yang jelas dan sempit dengan tipe pengembalian minimalis yang jelas. Jika Anda mulai membuat "fungsi tuhan" yang melakukan segalanya dan wastafel dapur tergantung pada argumen apa yang Anda berikan, Anda akan memasuki wilayah kode spageti yang sulit dipertahankan. Anda tidak menginginkan fungsi yang melakukan A dan mengembalikan B jika Anda meneruskannya X, tetapi melakukan C dan mengembalikan D jika Anda meneruskannya Y dll...
Merupakan ide bagus untuk memulai beton dan menggeneralisasi dari waktu ke waktu saat Anda melihat pola serupa muncul. Jadi, buat metode yang benar-benar Anda butuhkan:
public function findUserById($id)
public function findUserByEmail($email)
public function updateCompanyName($id, $newName)
Jika Anda menemukan bahwa Anda telah berbagi kode di antara fungsi-fungsi ini, satukan kode di belakang layar agar tetap KERING:
public function findUserById($id) {
return $this->find('SELECT * FROM user WHERE id = ?', $id);
}
public function findUserByEmail($email) {
return $this->find('SELECT * FROM user WHERE email = ?', $email);
}
protected function find($query, $arg) {
...
}
Jangan mulai sebaliknya, berpikir Anda "hanya perlu X, Y dan Z" yang tampaknya cukup mirip untuk disatukan menjadi satu metode, kemudian mengetahui ada perbedaan kecil antara X, Y dan Z dan mengotori kode Anda dengan kasus khusus untuk masing-masing. Itu hanya mengarah ke fungsi yang sangat besar atau sangat umum sehingga pada dasarnya mereka tidak melakukan apa-apa sendiri.