Một chức năng nên có các trách nhiệm hẹp, được xác định rõ ràng với các kiểu trả về được xác định rõ ràng, tối giản. Nếu bạn bắt đầu tạo ra các "chức năng thần thánh" làm mọi thứ và bồn rửa nhà bếp tùy thuộc vào đối số nào bạn vượt qua, bạn đang đi sâu vào lãnh thổ của mã spaghetti khó duy trì. Bạn không muốn một hàm thực hiện A và trả về B nếu bạn chuyển nó X, nhưng trả về C và trả về D nếu bạn chuyển nó Y, v.v.
Bạn nên bắt đầu bê tông hóa và tổng quát hóa theo thời gian khi bạn thấy các mẫu tương tự xuất hiện. Vì vậy, hãy tạo các phương pháp bạn thực sự cần:
public function findUserById($id)
public function findUserByEmail($email)
public function updateCompanyName($id, $newName)
Nếu bạn thấy bạn đã chia sẻ mã giữa các chức năng này, hãy thống nhất mã phía sau để giữ cho nó KHÔ:
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) {
...
}
Đừng bắt đầu theo cách khác, nghĩ rằng bạn "chỉ cần X, Y và Z" có vẻ đủ giống nhau để được thống nhất thành một phương pháp, sau đó phát hiện ra có sự khác biệt nhỏ giữa X, Y và Z và rải mã của bạn với các trường hợp đặc biệt cho mỗi. Điều đó chỉ dẫn đến các chức năng quá lớn hoặc quá chung chung, về cơ bản chúng không làm gì cả.