Ich habe heute eine Codeüberprüfung von einem leitenden Entwickler erhalten, in der gefragt wurde: "Was halten Sie übrigens davon, Funktionen über eine switch-Anweisung zu verteilen?" Ich habe an vielen Stellen gelesen, wie schlecht es ist, ein Argument durch die Methode zum Umschalten auf einen Aufruf zu pumpen. OOP, nicht so erweiterbar usw. Eine endgültige Antwort kann ich ihm jedoch nicht geben. Ich würde das gerne ein für alle Mal für mich selbst regeln.
Hier sind unsere konkurrierenden Codevorschläge (PHP wird als Beispiel verwendet, kann aber universeller angewendet werden):
class Switch {
public function go($arg) {
switch ($arg) {
case "one":
echo "one\n";
break;
case "two":
echo "two\n";
break;
case "three":
echo "three\n";
break;
default:
throw new Exception("Unknown call: $arg");
break;
}
}
}
class Oop {
public function go_one() {
echo "one\n";
}
public function go_two() {
echo "two\n";
}
public function go_three() {
echo "three\n";
}
public function __call($_, $__) {
throw new Exception("Unknown call $_ with arguments: " . print_r($__, true));
}
}
Ein Teil seines Arguments lautete: "Es (Switch-Methode) behandelt Standardfälle viel sauberer als die generische Methode __call () magic."
Ich bin nicht einverstanden mit der Sauberkeit und bevorzuge in der Tat einen Anruf, aber ich würde gerne hören, was andere zu sagen haben.
Argumente, die ich zur Unterstützung des Oop
Schemas vorbringen kann:
- Etwas sauberer in Bezug auf den Code, den Sie schreiben müssen (weniger, leichter zu lesen, weniger zu berücksichtigende Schlüsselwörter)
- Nicht alle Aktionen wurden an eine einzelne Methode delegiert. Hier gibt es keinen großen Unterschied in der Ausführung, aber zumindest ist der Text mehr unterteilt.
- Auf die gleiche Weise kann an einer beliebigen Stelle in der Klasse eine andere Methode anstelle einer bestimmten Stelle hinzugefügt werden.
- Methoden haben einen Namensraum, was sehr gut ist.
- Gilt hier nicht, aber es wird ein Fall betrachtet, in dem
Switch::go()
ein Element und kein Parameter bearbeitet wird. Sie müssten zuerst das Mitglied ändern und dann die Methode aufrufen. DennOop
Sie können die Methoden jederzeit eigenständig aufrufen.
Argumente, die ich zur Unterstützung des Switch
Schemas vorbringen kann:
- Der Einfachheit halber eine sauberere Methode für die Behandlung einer (unbekannten) Standardanforderung
- Scheint weniger magisch, was dazu führen könnte, dass sich unbekannte Entwickler wohler fühlen
Hat jemand für beide Seiten etwas hinzuzufügen? Ich hätte gerne eine gute Antwort für ihn.
Oop
erlaubt phpdoc zur Beschreibung jeder Methode, die von einigen IDEs (zB NetBeans) analysiert werden kann.