Сьогодні я отримав огляд коду від старшого розробника, запитуючи "До речі, яке ваше заперечення щодо диспетчеризації функцій за допомогою заяви переключення?" Я читав у багатьох місцях про те, як перекачування аргументу через перемикання на методи виклику є поганим OOP, не настільки розширюваним і т. Д. Однак я не можу дійсно придумати для нього остаточну відповідь. Я хотів би вирішити це для себе раз і назавжди.
Ось наші конкуруючі пропозиції щодо коду (php використовується як приклад, але може застосовуватися більш універсально):
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));
}
}
Частина його аргументу полягала в тому, що "Це (метод переключення) має набагато більш чистий спосіб вирішення випадків за замовчуванням, ніж те, що є у загальному магічному методі __call ()."
Я не згоден з чистотою і насправді віддаю перевагу дзвінкам, але хотів би почути, що мають сказати інші.
Аргументи, які я можу викласти у підтримку Oopсхеми:
- Трохи більш чіткий з точки зору коду, який потрібно написати (менше, легше читати, менше ключових слів враховувати)
- Не всі дії делеговані одному методу. Тут немає великої різниці у виконанні, але принаймні текст більш деталізований.
- У цьому ж ключі інший метод може бути доданий будь-де в класі замість конкретного місця.
- Методи розділені на імена, що приємно.
- Тут не застосовується, але розглянемо випадок, коли
Switch::go()керується членом, а не параметром. Вам слід спочатку змінити учасника, а потім викликати метод. БоOopви можете викликати методи самостійно в будь-який час.
Аргументи, які я можу викласти у підтримку Switchсхеми:
- Заради аргументу, більш чистий метод розгляду запиту за замовчуванням (невідомо)
- Здається менш магічним, що може змусити незнайомих розробників відчувати себе більш комфортно
У когось є що додати для будь-якої сторони? Я хотів би отримати гарну відповідь за нього.
Oopдозволяє мати phpdoc для опису кожного методу, який можна проаналізувати деякими IDE (наприклад, NetBeans).