Een functie moet duidelijk gedefinieerde, enge verantwoordelijkheden hebben met duidelijk gedefinieerde, minimalistische retourtypen. Als je begint met het creëren van "god-functies" die alles doen en het aanrecht doen, afhankelijk van de argumenten die je doorgeeft, begeef je je zwaar op het gebied van moeilijk te onderhouden spaghetti-code. U wilt geen functie die A doet en B retourneert als u deze doorgeeft aan X, maar wel C doet en D teruggeeft als u deze doorgeeft aan Y enz...
Het is een goed idee om te beginnen met beton en generaliseer in de loop van de tijd als je soortgelijke patronen ziet ontstaan. Creëer dus de methoden die u echt nodig heeft:
public function findUserById($id)
public function findUserByEmail($email)
public function updateCompanyName($id, $newName)
Als je merkt dat je code hebt gedeeld tussen deze functies, verenig dan de code achter de schermen om het DROOG te houden:
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) {
...
}
Begin niet andersom, denkend dat je "alleen X, Y en Z nodig hebt", die voldoende op elkaar lijken om in één methode te worden verenigd, om er later achter te komen dat er kleine verschillen zijn tussen X, Y en Z en je code vol te gooien met speciale gevallen voor elk. Dat leidt alleen maar tot functies die ofwel gigantisch zijn, ofwel zo algemeen dat ze eigenlijk niets uit zichzelf doen.